Muszę wiedzieć: Jaka jest złożoność czasu HashMap.containsKey() w java?Jaka jest złożoność czasu HashMap.containsKey() w java?
Odpowiedz
Ta implementacja zapewnia wydajność stałą czasową dla podstawowych operacji (GET i umieścić), zakładając, że funkcja mieszająca rozprasza prawidłowo elementy wśród wiader.
Od containsKey()
tylko get()
że wyrzuca pobraną wartość, to O (1) (przy założeniu, że funkcja skrótu działa prawidłowo, ponownie).
to jest to, co myślałem wcześniej. Ale to nie jest poprawne. Spójrz na odpowiedź Jigara Joshi. Twoja odpowiedź jest poprawna dla 'HashTable', która nie pozwala na wartości null. – AlexR
@AlexR: Myślę, że całkowicie nie rozumiesz kodu w odpowiedzi Jigara. Nie ma absolutnie nic wspólnego z wartościami pustymi, a pętla for wykonuje pętle tylko przez połączoną listę wpisów w jednym segmencie, który jest O (1), jeśli, jak stwierdzono dwukrotnie w mojej odpowiedzi, funkcja hash wykonuje swoje zadanie. –
Jeśli uda mi się wybrać klucze już na mapie, jest to O (n). –
Jest O(1)
w ogóle, jednak w najgorszym przypadku jest O(n)
public boolean containsKey(Object key) {
352 return getEntry(key) != null;
353 }
354
355 /**
356 * Returns the entry associated with the specified key in the
357 * HashMap. Returns null if the HashMap contains no mapping
358 * for the key.
359 */
360 final Entry<K,V> getEntry(Object key) {
361 int hash = (key == null) ? 0 : hash(key.hashCode());
362 for (Entry<K,V> e = table[indexFor(hash, table.length)];
363 e != null;
364 e = e.next) {
365 Object k;
366 if (e.hash == hash &&
367 ((k = e.key) == key || (key != null && key.equals(k))))
368 return e;
369 }
370 return null;
371 }
Generalnie O (1), ale jeśli używamy złej funkcji hashCode, musimy dodać wiele elementów do jednego kubełka, aby w najgorszym przypadku było ono O (n).
Złożoność czasowa containsKey
zmieniło się w JDK-1,8, jak inni wspomnieli, że jest O(1)
w idealnych przypadkach. Jednakże, w przypadku kolizji, gdzie keys
są Comparable
, kosze na przechowywanie elementów Collide nie są liniowe już po przekraczają pewną wartość progową zwaną TREEIFY_THRESHOLD
, która jest równa 8,
/**
* The bin count threshold for using a tree rather than list for a
* bin. Bins are converted to trees when adding an element to a
* bin with at least this many nodes. The value must be greater
* than 2 and should be at least 8 to mesh with assumptions in
* tree removal about conversion back to plain bins upon
* shrinkage.
*/
static final int TREEIFY_THRESHOLD = 8;
Innymi słowy, będą wykorzystywane TreeNodes
(podobne do tych w TreeMap
) do przechowywania pojemników (tj. struktura czerwono-czarna drzewa) i pozostawia nam złożoność w przypadku kolizji O(lgn)
.
To samo dotyczy get(key)
gdzie gdzie obie metody nazywamy getNode
wewnętrznie
Uwaga: n jest tu wielkość bin
a nie HashMap
- 1. Jaka jest złożoność czasu HashMap.containsValue() w java?
- 2. Złożoność czasu dla java ArrayList
- 3. Jaka jest złożoność czasu przeglądarek HTML DOM
- 4. Jaka jest złożoność czasu dodawania elementu na początku tablicy ArrayList?
- 5. Jaka jest złożoność czasu w dict.keys() w Pythonie?
- 6. Jaka jest złożoność czasu A * i jak jest uzyskiwana?
- 7. Jaka jest złożoność czasu funkcji liczenia w clojure?
- 8. jaka jest złożoność czasu metody Array # uniq w ruby?
- 9. Złożoność czasu system.out.println
- 10. Jaka jest złożoność czasu przejścia drzew przy użyciu plonu?
- 11. Złożoność czasu Java O (n^2/3)
- 12. Jaka jest najlepsza złożoność zagadek N-Queens?
- 13. Jaka jest złożoność set_intersection w C++?
- 14. Jaka jest złożoność złożonych lin zrównoważonych?
- 15. Złożoność czasu mnożenia macierzy w MATLAB
- 16. Złożoność czasu zabawy()?
- 17. Jaka jest najgorsza złożoność sortowania kubełków?
- 18. Jaka jest złożoność czasowa inicjowania macierzy?
- 19. Jaka jest złożoność Morris Traversal o (n)?
- 20. Jaka jest złożoność tego kodu manipulacji ciągami?
- 21. Jaka jest asymptotyczna złożoność operacji GroupBy?
- 22. Spark: Jaka jest złożoność czasu algorytmu połączonych komponentów używanego w GraphX?
- 23. Jaka jest złożoność czasu pojawiania się elementów z listy w Pythonie?
- 24. Jaka jest złożoność pamięci std :: sort() i std :: sort_heap()?
- 25. Złożoność czasowa podłoży Javy()
- 26. jak obliczyć złożoność czasu sortowania bąbelkowego
- 27. Czym jest złożoność OrderedDictionary?
- 28. Złożoność czasowa tabeli mieszania
- 29. Jaka jest formuła obliczania znacznika czasu?
- 30. Złożoność w algorytmie rekursji
@OlegSklyar To pytanie pomógł mi, bo miałem do wdrożenia sama HashMap. – trinity420
@ trinity420 Czy to uzasadnia brak przeczytania dokumentacji API, gdy masz pytanie dotyczące interfejsu API? –