Ich arbeite derzeit in einer Java-Anwendung mit vielen Strings (+2000). Ich möchte diese Strings in einer geeigneten Struktur speichern. Wenn ich also einen neuen String speichern möchte, kann ich schnell nachsehen, ob bereits ein String vorhanden ist. Wenn keine gleiche Zeichenfolge in der Struktur war, fahre ich fort, die neue zu speichern (im Grunde speichern, ohne Strings zu wiederholen.).Effizienter Weg/Struktur, um nur verschiedene Strings zu speichern
//PSEUDOCODE
private ?????? myCollectionOfStrings;
public void store_If_Not_Exist(String aNewString){
if (!exist_in_Collection(aNewString)){ //this must be fast.
store_in_Collection(aNewString);
}
}
Ich bin derzeit eine naive Implementierung verwendet wird, aber ich weiß, dass ist wirklich ineffizient:
private List<String> myCollectionOfStrings;
public void store_If_Not_Exist(String aNewString){
boolean existInCollection = false;
for (String s: myCollectionOfStrings){
if (s.equals(aNewString)){
existInCollection = true;
break;
}
}
if(!existInCollection)
store_in_Collection(aNewString);
}
Die Frage ist: Welche Art von Verfahren/Struktur/Algorithmus kann i verwenden, um die Zeichenfolgen zu speichern, so dass die Überprüfung auf Existenz schnell implementiert werden kann? Vielleicht ein Trie Tree oder eine HashMap ???. Vielen Dank!
Verwenden Sie ein 'Set'. Aber alles, was nach Hashcode aussieht, ist relativ effizient. 2000 ist nicht so groß. Ich nehme natürlich an, dass Sie nach einer direkten Übereinstimmung suchen, und nicht nach Dingen wie Stemming, Plural usw. Mit "Set" wäre es tatsächlich möglich, den Check zu umgehen, da nur eine Instanz vorhanden ist. –
KevinO
Sie suchen nach einer Set-Datenstruktur. In Java 'HashSet'. Es hat O (1) Lookup-Zeit für ein Element. –
Verwenden Sie ein 'HashSet', das ist sehr schnell – Bohemian