Kategorie szkoleń | Egzaminy | Kontakt
  • 1
  • 0
  • 206

Mając:

 

public class Person {

    private name;

    public Person(String name) {
        this.name = name;
    }

    public int hashCode() {
        return 420;
    }
} 

 

która odpowiedź jest prawdziwa:

  1. Czas wyszukiwania wartości z HashMapy o kluczach typu Person zależy liniowo od rozmiaru mapy
  2. Usunięcie dowolnego klucza Person z HashMapy spowoduje usunięcie wszystkich wartości o kluczu typu Person
  3. Wstawienie drugiego obiektu typu Person do HashSeta spowoduje usunięcie pierwszego obiektu jako duplikatu
  4. Czas ustalenia, czy obiekt typu Person znajduje się w HashSecie jest stały i nie zależy od rozmiaru zbioru
Uczestnik szkolenia
  • Zapytał
  • @ Uczestnik szkolenia | 09.09.2014

Odpowiedź (1)

  • 0

Prawidłowa jest odpowiedź nr 1.

Funkcja hashCode zwracająca dla kaźdego obiektu tę samą wartość nie spowoduje błędnego działania kolekcji HashSet lub HashMap, ale wpłynie bardzo niekorzystnie na wydajność tych kolekcji.

Zależność między equals i hashCode są następujące:

  1. jeśli 2 obiekty są równe, to hashCode musi zwrócić tę samą wartość - i ta zdegenerowana funkcja spełnia ten warunek
  2. jeśli 2 obiekty nie są równe, to funkcja hashCode powinna zwracać dla nich różne wartości - powinna, ale nie musi

Funkcja hashCode zwracająca tę samą wartość wpłynie bardzo niekorzystnie na wydajność kolekcji opartych o hashowanie. Czas wyszukiwania zamiast prawie stałego będzie liniowy, gdyż obiekty zamiast być rozrzucane trafią pod tę samą wartość hash tworząc listę.

  • Odpowiedział
  • @ | 09.09.2014
  • TRENER ALTKOM AKADEMII