Was ist die Datenstruktur in Java, die die schnellste Operation für enthält () hat?
zB habe ich eine Reihe von Zahlen {1, 7, 12, 14, 20 ...}
Was ist bei einer anderen willkürlichen Zahl x (im Durchschnitt) der schnellste Weg, um den booleschen Wert zu generieren, ob x in der Menge enthalten ist oder nicht? Die Wahrscheinlichkeit für! Enthält () ist ungefähr 5x höher.
Bieten alle Kartenstrukturen eine o (1) -Operation? Ist HashSet der schnellste Weg?
java
data-structures
set
Codechobo
quelle
quelle
Für Ihren speziellen Fall von Zahlen mit einer relativ hohen Dichte würde ich ein BitSet verwenden, es ist schneller und viel kleiner als ein Hash-Set.
quelle
Die einzige Datenstruktur, die schneller als HashSet ist, ist wahrscheinlich TIntHashSet von Trove4J. Hierbei werden Grundelemente verwendet, ohne dass ganzzahlige Objekte verwendet werden müssen.
Wenn die Anzahl der Ganzzahlen gering ist, können Sie einen Booleschen Wert [] erstellen, bei dem jeder vorhandene Wert in "true" umgewandelt wird. Dies wird O (1) sein. Hinweis: Es wird nicht garantiert, dass HashSet O (1) ist, und es ist wahrscheinlicher, dass es O ist (log (log (N))).
Sie erhalten nur O (1) für eine ideale Hash-Verteilung. Es ist jedoch wahrscheinlicher, dass Kollisionen von gehashten Buckets auftreten und einige Suchvorgänge mehr als einen Wert überprüfen müssen.
quelle
Hashing (Hash-Set) ist das beste mit O (1)
quelle