Java ArrayList - find Item / Gegenstand Finden - brauche ich Hash?
Im Java zu lernen und habe ein problem mit der ArrayList. Ich habe gelesen das Java-doc und bin am überlegen mir vielleicht tun müssen, um die hash-was?
Ich habe ein Objekt namens Katalog hat ein array Liste der Objekte, die aus einer anderen Klasse mit dem Namen Element. Jedes Element hat Felder für Größe, Farbe, Preis, Produkt-code, (dies sind die Attribute von items). Brauche ich, um eine Methode in den Katalog akzeptiert den Produktcode und durchsucht die ArrayList zu finden, das Objekt mit den passenden Produkt-code. Und gibt dann das Produkt.
Ich habe eine toString-Methode in meinem Element-Klasse, die eine Liste aller Felder & Ihre Werte, wenn Sie aufgerufen. Vielleicht ist das, was zurückgegeben werden soll, wenn der passende code gefunden ist, in array-Liste?
import java.util.ArrayList;
public class Catalogue
{
private ArrayList<Item> catalogue;
public Catalogue ()
{
catalogue = new ArrayList<Item>();
}
public void findItem(int code)
{
if(Item.code == prodcode){
}
else{
System.out.println(catalogue.get(item));
}
}
Ich schaute auf Java-doc und ich lese über hash-und vielleicht ist es besser für mich zu nutzen, dass anstatt iterator? Ich bin mir nicht sicher, welche route zu nehmen. Mein code ist zur Hälfte fertig
Jede Hilfe sehr geschätzt.
Thankls
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was Sie tun können, hängt davon ab, wie nah beieinander Ihre Produkt-codes sind. Ich vermute, Sie sind nicht sequenziell, in dem Fall würden Sie in der Tat brauchen, um eine HashMap.
Wenn Sie die Elemente gespeichert, die in der HashMap speichern Sie sortiert nach den Informationen, die Sie verwenden möchten, wenn Sie Sie nachschlagen:
Dann, wenn Sie Sie brauchen zu Holen ein Element anhand seiner Produkt-code verwenden:
Item item = map.get(code);
Angesichts der Anforderungen, die in Ihrer Frage, es scheint nicht, wie Sie verwenden müssen, der hashcode nur noch für die Suche nach dem Artikel in Ihrem Katalog. Sie brauchen, um...
Code kann wie folgt Aussehen
Könnten Sie verwendet haben, hashcodes, um Dinge zu beschleunigen, aber für Sie, dass Ihr Katalog wird eine HashMap
Gibt es ein paar Möglichkeiten, Sie können damit umgehen, aber die eine, die pops in den Sinn ist das überschreiben der equals-und hashcode-Methode für Sie die Item-Klasse und verwenden Sie die folgenden:
Halten Sie daran, Sie werden überschreiben, Ihr equals-und hashCode-Methode zum vergleichen von zwei Item-Objekte basierend auf der code-member-variable nur.
Wenn Sie tun dies Recht Häufig, Sie könnten erwägen, eine HashMap als die lookup-Zeit ist konstant. Sie könnten das tun, indem Sie Folgendes tun:
Hoffe, das hilft.
equals
, es wäre besser, wenn seine Klasse zu implementierenComparable
erstellen Sie eine benutzerdefinierte Komparator-und übergeben, wenn nötig.ArrayList.get(int)
gibt das element an der angegebenen position in dieser Listeitem
ist nicht einint
(in der Tat, sind Sie nicht, es zu definieren) und in jedem Fall würden Sie nur verwendenget
wenn Sie möchten, dass eine bestimmte position.http://download.oracle.com/javase/6/docs/api/java/util/ArrayList.html#get%28int%29
Sollten Sie eine HashMap statt, so werden Sie in der Lage, speichern Sie die Elemente durch Ihre (seltene, glaube ich) Produkt-code. Aber dann hätte man auch überschreiben müssen, hashCode-und equals im Element.
Beispiel:
0..N
, wo Sie verwendet werden könnten, da die Indizes in einer ArrayList), dann eine Karte (entweder HashMap oder TreeMap) ist mehr nützlich.List
bietet O(n) bei der Suche, o(1) bei der Beurteilung. Aber wenn du es in Ordnung und binäre-Suche, kann man O(long n);Könnten Sie auch
TreeMap
bietet es O(log n) bei der Suche und hinzufügen.Während
HashMap
bietet immer O(1);