Avatar billede gala Nybegynder
14. december 2003 - 20:58 Der er 8 kommentarer og
1 løsning

en remove der ikke virker på en vector

Hej!
Jeg har følgende stykke kode:

Vector liste = base.hentFilLejligheder();
liste.remove(boligannonce);
System.out.println(liste.size());
base.skrivFilLejlighed(liste);

liste.remove virker ikke. Det er lidt underligt, for erstatter jeg den med liste.add, så virker det fint...
Nogen der kan sige mig hvorfor?
Gala
Avatar billede arne_v Ekspert
14. december 2003 - 21:01 #1
Den burde virke.

*MEN* har den klasse som boligannonce tilhører en fornuftig equals metode ?
Avatar billede gala Nybegynder
14. december 2003 - 21:02 #2
hm, ikke nogen særlig naj, men hvad skulle sådan en se ud som og hvad skulle den hjælpe?
Avatar billede arne_v Ekspert
14. december 2003 - 21:03 #3
Object equals som alle objekter arver tester kun om objekterne er samme
objekt d.v.s. ligger samme sted i memory.

Du skal lave en equals som sammenligne rindholdet af objektet.
Avatar billede erikjacobsen Ekspert
14. december 2003 - 21:03 #4
Fordi, som der står om remove:

Removes the first occurrence of the specified element in this Vector If the Vector does not contain the element, it is unchanged. More formally, removes the element with the lowest index i such that (o==null ? get(i)==null : o.equals(get(i))) (if such an element exists).

uden equals ved den jo ikke hvilken du vil af med ;)
Avatar billede gala Nybegynder
14. december 2003 - 21:04 #5
men det sjove er at det jo BURDE være samme objekt....
Avatar billede arne_v Ekspert
14. december 2003 - 21:04 #6
Her er et eksempel på en klasse med en equals:

class Something {
    private int num = 0;
    private String str = null;
    public Something(int num, String str) {
        this.num = num;
        this.str = str;
    }
    public int getNum() {
        return num;
    }
    public String getStr() {
        return str;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public void setStr(String str) {
        this.str = str;
    }
    public boolean equals(Object o) {
        if (o instanceof Something) {
            if (((Something)o).num == num &&
                ((Something)o).str.equals(str)) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }
}
Avatar billede gala Nybegynder
14. december 2003 - 21:05 #7
ah! kan godt se det.
Avatar billede arne_v Ekspert
14. december 2003 - 21:07 #8
Ovenstående kode burde iøvrigt også have en:

public int hashCode() {
  return num+str.hashCode();
}

for at overholde spille reglerne.
Avatar billede arne_v Ekspert
14. december 2003 - 21:52 #9
OK ?
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