Avatar billede mindreklog Nybegynder
13. juni 2003 - 16:33 Der er 20 kommentarer og
1 løsning

nogen der kan forklare mig brug af arraylist - simpelt

Hej jeg ville gerne have forklaret bruge af arraylist - helst så simpelt som muligt - og gerne forklaring og et eks. som er kommenteret...

Håber ikke det er for meget at forlange...
Skal til eksamen - og har en smule problemer med det...Foretrækker at bruge det statiske array, men det giver jo ikke lige så mange point... :-)
Avatar billede soreno Praktikant
13. juni 2003 - 16:37 #1
F.eks.

import java.util.*;

public class Main
{
        public static void main(String[] args)
        {
            ArrayList list = new ArrayList();
            for(int i=0;i<15;i++)
            {
                list.add(new Integer(i));
            }

            for(int i=0;i<list.size();i++)
            {
                System.out.println("Element[" + i + "]: " + list.get(i));
            }
        }
}
Avatar billede soreno Praktikant
13. juni 2003 - 16:38 #2
Fordelen er at du ikke behøver bekymre dig om størrelsen af list.
En ArrayList sørger selv for at udvide hvis der mangler plads.
Avatar billede arne_v Ekspert
13. juni 2003 - 16:41 #3
Et ArrayList er et dynamisk (d.v.s. at det udvider sig automatisk)
array af objekter (d.v.s. ikke af simple data typer).

Jeg havde tilfældigvis dette eksmepel liggende:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class SortArrayList {
    public static void main(String[] args) {
        List lst = new ArrayList();
        lst.add("CCC");
        lst.add("BB");
        lst.add("A");
        for(int i = 0; i < lst.size(); i++) {
            System.out.println((String)lst.get(i));
        }
        Collections.sort(lst);
        for(int i = 0; i < lst.size(); i++) {
            System.out.println((String)lst.get(i));
        }
    }
}
Avatar billede soreno Praktikant
13. juni 2003 - 16:41 #4
//Opretter et ArrayList objekt som hedder list
ArrayList list = new ArrayList();


//Tilføjer et Integer objekt til arrayet
list.add(new Integer(i));


//Returnerer objektet på i's plads.
list.get(i);


Du kan finde flere metoder og beskrivelser her:
http://java.sun.com/j2se/1.4.1/docs/api/java/util/ArrayList.html
Avatar billede mindreklog Nybegynder
13. juni 2003 - 16:45 #5
ok, men hvad vil det helt præcis sige, at det ikke kan indeholde simple datatyper men kun objekter - jeg har selv lavet et udfra en bog - og der kan jo sagtens ligge tal osv...

er det bare den måde man opretter på der er forskellen?
altså:
int[]arr = new int []

ArrayList arrlist = new Arraylist()

??

og kan man godt lave et 2-dimensionelt arraylist??
Avatar billede soreno Praktikant
13. juni 2003 - 16:51 #6
F.eks.

ArrayList list[] = new ArrayList[255];

for(int i=0;i<list.length;i++)
{
  list[i] = new ArrayList();
}
Avatar billede soreno Praktikant
13. juni 2003 - 16:53 #7
Simple datatyper er f.eks. int, char, double, long, short og float

Dvs. de er ikke objekter.

En ArrayList kan kun gemme på objekter derfor pakker man simple datatyper ind i objekter der repræsenterer deres type.

F.eks.
int value = 12345;
Integer temp = new Integer(value);
list.add(temp);
Avatar billede arne_v Ekspert
13. juni 2003 - 16:54 #8
Simple data-typer int, double etc. skal wrappes i deres
tilsvarende klasse Integer, Double etc. - se Sørens første
kode for et eksempel for int->Integer.
Avatar billede arne_v Ekspert
13. juni 2003 - 16:55 #9
Man kan godt lave et array af ArrayList, men hvis man er igang med
ArrayList så kunne man jo også putte ArrayList'er i en ArrayList !

Altså:

1 ArrayList som indeholde mange ArrayList som hver indeholder mange
objekter !
Avatar billede Slettet bruger
13. juni 2003 - 16:56 #10
Det er vel også vigtigt at nævne, at ArrayList er en Collection.
Avatar billede simonvalter Praktikant
13. juni 2003 - 17:00 #11
du kan kigge på den nye javabog vp og kigge lidt på mængder og lister ..
http://javabog.dk/VPJ/bog2.html
Avatar billede mindreklog Nybegynder
13. juni 2003 - 17:44 #12
F.eks.

Forstår ikke helt det her eks soreno...
Er det et arraylist du laver på præcis samme måde som ved et alm. array??

ArrayList list[] = new ArrayList[255];

for(int i=0;i<list.length;i++)
{
  list[i] = new ArrayList();
}
Avatar billede soreno Praktikant
13. juni 2003 - 17:52 #13
// Laver et array af ArrayList objekter
ArrayList list[];

// Afsætter plads til 123 stk. ArrayList
list = new ArrayList[123];

// Initialiserer hvert element med en instans af en ArrayList
for(int i=0;i<list.length;i++)
{
  list[i] = new ArrayList();
}

Så indsættes der f.eks. sådan:
list[12].add(new Integer(12345));
list[1].add(new Integer(12345));
Avatar billede mindreklog Nybegynder
13. juni 2003 - 18:22 #14
ok, men hvis nu f.eks. man skulle lave et arraylist over elever, som hver skal have tilknyttet X antal fag og en der tilhørende karakter..Så tænkte jeg, at det var smart at lave et 3-dimensionelt array - problemet er bare så, at antallet af elever svinger f.eks. mellem 100 og 500...Så ville det jo være smart at lave et arraylist (ER DET IKKE KORREKT FORSTÅET??) - men kan man så gøre på samme måde ?

ArrayList elever [][][] = new ArrayList [][][]
Avatar billede mindreklog Nybegynder
13. juni 2003 - 18:23 #15
og lige til sidst - behøver man så ikke at sætte en pre-size på et arraylist ? altså ligesom ved array??
Avatar billede arne_v Ekspert
13. juni 2003 - 18:27 #16
Du skal angive dimensionen på et array når du new'er det.

ArrayList er helt dynamisk og du behøver ikke angive nogen initial size
(den har en default).
Avatar billede soreno Praktikant
13. juni 2003 - 18:28 #17
Det mest smarteste ville være at lave en aggregeringsstruktur.

Elev
    1
  |
0..n
Fag
    1
  |
0..n
Karakter

Så gemmer du Elev objekter i en ArrayList og får fat i det du skal bruge ved get og set metoder på klasserne.
Avatar billede mindreklog Nybegynder
13. juni 2003 - 18:35 #18
aggregeringsstruktur - kan du ikke lige forklare det lidt mere...Er ikke helt med på hvad du mener?
er det tre Arraylist du har lavet eller??
Jeg ved godt det ser skidt ud, men har aldrig brugt arraylist før - har i stedet brugt array...
Avatar billede soreno Praktikant
13. juni 2003 - 18:39 #19
F.eks.

import java.util.*;

public class Main
{
        public static void main(String[] args)
        {
            ArrayList list = new ArrayList();

            for(int i=0;i<5;i++)
            {
                Elev elev = new Elev("Elev" + i);
                Fag fag1 = new Fag("Fag1");
                Fag fag2 = new Fag("Fag2");
                elev.addFag(fag1);
                elev.addFag(fag2);
                list.add(elev);
            }

            for(int i=0;i<list.size();i++)
            {
                Elev elev;
                elev = (Elev)list.get(i);
                System.out.println("Elevnavn: " + elev.getNavn());
                for(int j=0;j<elev.getNumberOfFag();j++)
                {
                    Fag fag;
                    fag = elev.getFag(j);
                    System.out.println("\tFag: " + fag.getNavn());
                }
            }
        }
}

class Elev
{
        private String navn;
        private ArrayList list;

        public Elev(String navn)
        {
            this.navn = navn;
            list = new ArrayList();
        }

        public void setNavn(String navn)
        {
            this.navn = navn;
        }

        public String getNavn()
        {
            return navn;
        }

        public void addFag(Fag fag)
        {
            list.add(fag);
        }
       
        public int getNumberOfFag()
        {
            return list.size();
        }

        public Fag getFag(int index)
        {
            return (Fag)list.get(index);
        }
}

class Fag
{
        private String navn;

        public Fag(String navn)
        {
            this.navn = navn;
        }

        public void setNavn(String navn)
        {
            this.navn = navn;
        }

        public String getNavn()
        {
            return navn;
        }

}
Avatar billede soreno Praktikant
13. juni 2003 - 18:40 #20
Med andre ord:
Udnyttelse af de objektorienterede principper.
Avatar billede mindreklog Nybegynder
13. juni 2003 - 18:47 #21
jepper
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester