Implementering av generisk Samlingsklass Java
Hej! Jag sitter med jobbar med övningar som rör generiska klasser i en kurs där vi använder Java. Har kört fast totalt, kurslitteraturen är inte ger så bra exempel så det är en del höftande.
Just nu så har jag en uppgift som lyder:
Jag skrev koden:
public boolean contains(Object x){
for( E a : theCollection){
if (a==x){
return true;
}
return false;
}
}
Och fick feedbacken:
Jag får tipset att ändra från "==" till 'equals' och ändrar koden till
Jag skrev koden:
public boolean contains(Object x){
for( E a : theCollection){
if (a.equals(x)){
return true;
}
return false;
}
}
och får feedbacken
Jag sitter och knepar ett tag och får för mig att byta plats på x och a:
public boolean contains(Object x){
for( E a : theCollection){
if (x.equals(a)){
return true;
}
return false;
}
}
Var på det funkar galant och uppgiften är löst.
Jag fick förklarat för mig varför "==" inte fungerade som tänkt.
Men varför fungerar jämförelsen med equals på just ena hållet men inte andra?
Edit: bytade tråd från Javascript till Java och uppdaterade frågan efter att jag kom med en lösning jag själv inte förstår.
Det kan vara så här: == jämför om objekten upptar samma minne, och det gör två kopior av talet 900 inte nödvändigtvis. De minsta talen kan redan finnas med färdiga Objects, som optimering, och därför blir 9 inte en kopia, utan samma objekt.
Du ska nog använda 'equals'.
Edit: Förresten har du lagt frågan i fel kategori. Javascript är något helt annat än Java.
(Flyttade upp i frågan)
Det ser ut som om deras implementation av listan börjar med 10 stycken objekt, fast inga används än (liten optimering, antagligen, för att inte behövs allokera nytt så ofta när det finns få element). Då är de null (eller Null eller NULL eller hur man skriver i Java), alltså en pekare som inte pekare på något minne. Den kan man inte använda för att anropa metoder.
Så kolla antingen bara det antal element som faktiskt används i listan, eller testa först om a är Null innan du gör a.equals.
Hej! :) Vet inte om du redan löst uppgiften nu, men jag fick helt grönt om jag skrev:
for (int i = 0; i < size; i++) {
if (theCollection[i].equals(x)) {
return true;
}
}
return false;
}