Java arraylist indexof
Hier ist meine Klasse animals.java
:
public class animals {
String Name, ID;
static ArrayList<animals> animalData = new ArrayList<animals>();
public animals(){}
public animals(String name, String id){
super();
this.Name = name;
this.ID = id;
}
public void addAnimal(String name, String id){
animalData.add(new animals(name, id));
}
public int search(String name){
return this.animalData.indexOf(name);
}
}
Wenn ich ein Tier Namen mit einer id, die es normal funktioniert, aber wenn ich Suche Methode, die ich sah, nur -1. Vielleicht versuche ich Methode überschreiben equals
oder indexof
in dieser Klasse? helfen Sie mir für diese
Danke und sorry für mein schlechtes Englisch.
Ja, müssen Sie das überschreiben der equals-Methode.
InformationsquelleAutor kibar | 2012-09-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie das hinzufügen von Instanzen von
animals
auf der Liste. Sie sind auf der Suche nach der Instanz-name. DaanimalData
enthält keine Instanzen vonString
,indexOf()
wird nie wieder einen index.Wenn Sie wollen, um den Zugriff auf eine Instanz von
animals
durch den Namen, den Sie verwenden sollten, eineMap<String,animals>
.Den richtigen Gebrauch der
indexOf()
ist vorbei, dass in einer Instanz gleich ist, ist eine Instanz, die bereits in der Sammlung. Wie andere haben darauf hingewiesen, dies wird von Ihnen verlangen, zu definierenequals()
zu definieren, was macht zwei Instanzen gleich sind. Sollten Sie auch überschreibenhashcode()
beim überschreibenequals()
weil es eine Korrelation angenommen.Hinweis: Die Konvention ist die Verwendung CapitalCase für Klassennamen. Auch die class-Namen sollten nicht im plural. Sie haben viele Instanzen von
Animal
können Sie später eine Klasse, die eine Sammlung vonAniamal
s, aber das sollte nicht der name der main-Klasse.Meinst du, dass Sie möchten, um Zugriff auf "KATZE" auf der Grundlage der
ID
Sie definieren? Oder wollen Sie darauf zugreifen, indem Sie den index der Instanz in der Liste vorhanden ist?indexOf()
geben Sie den index der Instanz in der Liste. Es wird nicht suchen Sie in der Liste für die Instanz mit dem Namen "CAT" und Sie wieder die id, die Sie zugewiesen "1"; Wenn Sie wollen, um die später, sollten Sie eine map von string zu string und verwenden Sie Namen als Schlüssel und die id als Wert.ok danke, ich verstehe 😉
InformationsquelleAutor unholysampler
Ja, Sie außer Kraft setzen müssen
equals()
undhashcode()
Methoden, wenn Sie die Verwendung von Objekten in Sammlungen und durchführen-lookup basierend auf Objekt.indexOf()
Objekt gibt, da es nur Objekt gibt an, dass besonders index. Aber, wenn Sie tun, Objekt-basierte lookup, wenn equals() undhashCode()
nicht überschrieben sind,equals()
möglicherweise fehl, und erhalten Sie unvorhersehbare Ergebnisse.Was meinst du mit " funktioniert es nicht? Können Sie die update-Frage mit der equals() und hashcode() Methoden?
Siehe diesen link für mehr Informationen technofundo.com/tech/java/equalhash.html
Wenn Sie problem haben mit equals/hashcode UND mit eclipse, klicken Sie auf
Source -> Generate hashCode() & equals()
InformationsquelleAutor kosa
Müssen Sie definieren eine "equals" - Methode
wenn ich definiere equals-Methode, deren Standard-code, wie ich das ändern ich weiß nicht :s
Sie wollen wahrscheinlich etwas wie public boolean equals(Object b) { return ( id.equals(b)); }
InformationsquelleAutor ddyer
Du suchst einen String...
Sollten Sie besser eine HashMap, denke ich...
Aber ja, Sie ändern Ihre Struktur(das ist nicht sehr effizient)
InformationsquelleAutor hilaia
Hier ist der code, den ich verwenden würde:
Diese Weise stellen Sie die
search
- Methode viel schneller (O(1)), die Sie nicht benötigen, überschreiben Sie dieequals
Methode mehr.Beachten Sie, dass, wenn
animalData
ist statisch, die Sie berücksichtigen sollten, umaddAnimal()
statische als gut, da es eine Art 'setter' füraniamalData
.InformationsquelleAutor aymeric