Avatar billede changelevel Nybegynder
08. marts 2013 - 00:50 Der er 14 kommentarer og
1 løsning

ArrayList

Kære Eksperten,

Jeg har en arrayList med nogle værdier i. Men jeg vil gerne flytte værdierne til en anden arrayList,
og bageefter vil jeg gerne slette den gammel arrayLists værdierne.

Men jeg får desværre fejl når jeg kører nedenstående kode:

ArrayList<String> list = new ArrayList<>();

        list.add("værdi");
        list.add("værdi2");
        list.add("værdi3");

        ArrayList<String> nyList = new ArrayList<>();
        for (String værdi: list) {
            nyList.add(værdi);
            list.clear();
        }

        for (String værdi: nyList) {
            System.out.println(værdi);
        }

Nogle kan give en hit til hvordan det skal gøres?

mvh.
Li
Avatar billede arne_v Ekspert
08. marts 2013 - 01:07 #1
for (String værdi: list) {
            nyList.add(værdi);
        }
Avatar billede arne_v Ekspert
08. marts 2013 - 01:08 #2
altsaa:

        for (String værdi: list) {
            nyList.add(værdi);
        }
        list.clear();
Avatar billede arne_v Ekspert
08. marts 2013 - 01:08 #3
eller nemmere:

        nyList.addAll(list);
        list.clear();
Avatar billede changelevel Nybegynder
08. marts 2013 - 09:02 #4
Hvordan kan det være når jeg ændre noget værdierne i den nylist ,
så bliver værdierne i den gammellist også ændret??

det vil jeg ikke have??


kode exampel:

public class Dog {

    private int alder;

    public Dog(int alder) {
        this.alder = alder;
    }

    public int getAlder() {
        return alder;
    }

    public void setAlder(int alder) {
        this.alder = alder;
    }
}

      Dog dog1 = new Dog(3);
        ArrayList<Dog> list = new ArrayList<>();
        ArrayList<Dog> nyList = new ArrayList<>();
        list.add(dog1);
        for (Dog dog : list) {
            nyList.add(dog);
        }

        for (Dog dog : nyList) {
            dog.setAlder(20);
            System.out.println(dog.getAlder());
        }
       
        for (Dog dog : list) {
            System.out.println(dog.getAlder());
        }
    // i list skulle alder være 3, men den bliver også ændret              til 20.

Hjælp hjælp :D
Avatar billede erikjacobsen Ekspert
08. marts 2013 - 09:34 #5
Du har kun sagt "new Dog" een gang, så der er kun een hund. De to lister peger (referer) derfor til den samme hund.
Avatar billede changelevel Nybegynder
08. marts 2013 - 09:40 #6
nå jahh....

En af løsningerne er at man kan lave en ny dog.

Men er der flere løsninger?

hvad med clone metode?

vil det virke? (hvis det virker, hvad er syntax for det)
Avatar billede erikjacobsen Ekspert
08. marts 2013 - 10:06 #7
Øhm, jah. Det kommer an på. Jeg synes ikke man skal begynde at bruge .clone() - det bliver noget rodet noget, og generelt har man heller ikke bruge for det.

Du skal enten tænke på en anden måde med hensyn til dine objekter. Eller selv lave en kopi af hunden med en "copy constructor" http://en.wikipedia.org/wiki/Copy_constructor  - men afhængig af hvad du vil.

Jeg tror ikke at jeg i de 10+ år jeg har brugt Java nogensinde har brugt clone, og jeg mener heller ikke jeg har lavet en copy constructor.
Avatar billede arne_v Ekspert
08. marts 2013 - 14:56 #8
Umiddelbart vil jeg mene at du skal constructe en ny Dog - det synes at passe bedst med den virkelighed du modellerer.
Avatar billede arne_v Ekspert
08. marts 2013 - 14:58 #9
En hurtig soegning i min Java kode viser at jeg bruger clone i ca. 3/4 procent af dem.

Men da clone lave en shallow clone og ikke en deep clone, saa skal man vide hvad man goer.
Avatar billede changelevel Nybegynder
11. marts 2013 - 00:16 #10
jeg har løst problemmet med at newer en dog mere.  :d
Inden De lægger et svar vil jeg spørge dem om det er muligt få den sidste værdi ud af en hashmap, uden AT man vide om dens key?
Avatar billede arne_v Ekspert
11. marts 2013 - 00:37 #11
Hvad definerer du som *sidste* vaerdi i en HashMap?
Avatar billede changelevel Nybegynder
11. marts 2013 - 00:45 #12
Jeg vil gerne have den sidste element ud af hashmap.?


Når det er arraylist så kan man gøre sådan:
arraylist.get(arraylist.size()-1);

Men hvordan gør jeg det når det er hashmap?
Avatar billede arne_v Ekspert
11. marts 2013 - 00:58 #13
I en ArrayList er ekementerne indekseret med tal og det fleste opfatter "sidste" som vaerende hoejeste indeks og dermed sidste indsatte.

HashMap er anderledes. Der er ikke noget indeks og der er ikke nogen indbygget raekkefoelge. Derfor er der heller ikke nogen klar definition af hvad "sidste" betyder.

Hvis dine keys kan sorteres kan du finde den stoerste key og den tilsvarende vaerdi.

Du kan ikke finde den sidst indsatte, da den information ikke gemmes.
Avatar billede changelevel Nybegynder
11. marts 2013 - 01:15 #14
fair nok, smider du et svar?
Avatar billede arne_v Ekspert
11. marts 2013 - 01:23 #15
svar
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