2012-10-30 7 views
10

Ostatnio uczyłem się o HashMaps, ale mam jedno pytanie, na które nie mogę uzyskać jasnej odpowiedzi. Główną różnicą pomiędzy -Różne sposoby tworzenia HashMaps

HashMap hash1 = new HashMap(); 

vs

HashMap<,>hash1 = new HashMap <,>(); //Filled in with whatever Key and Value you want. 

myślałem podczas definiowania HashMap Wymaga klucz i wartość. Każda pomoc byłaby bardzo cenna. Dziękuję Ci.

+2

jakim języku? – Jasper

+0

Warto również zadeklarować zmienną a Map - spójrz na [ten post] (http://stackoverflow.com/questions/1348199/java-hashmap-vs-map-objects), aby uzyskać więcej informacji. –

+0

Java i dziękuję za wpis. – StaticGamedude

Odpowiedz

9

Powinieneś rzucić okiem na Java generics, jeśli nie określisz typów HashMap, kluczem i wartością będzie typ Object.

Tak więc, jeśli chcesz HashMap z Integer kluczy i String wartości na przykład:

HashMap<Integer, String> hashMap= new HashMap<Integer, String>(); 
+1

Ach, teraz widzę, ta odpowiedź pomogła, dziękuję. – StaticGamedude

+0

Nie ma za co @StaticGamedude, czy mógłbyś go oznaczyć jako odpowiedź? Ten znacznik pod pomocnymi głosami :) – HericDenis

3

Określanie key i typy value pozwala na większą typu bezpieczeństwa poprzez umożliwienie kompilacji egzekwowania pisania.

Ułatwia to pisanie kodu, który nie powoduje przypadkowego pomylenia typów kluczy i wartości oraz zmniejsza liczbę rzutów, które użytkownik musi jawnie zadeklarować w kodzie.

Należy jednak pamiętać, że te kontrole typu są wykonywane tylko podczas kompilacji, tj. Po uruchomieniu aplikacji maszyna JVM umożliwia korzystanie z dowolnych typów kluczy i wartości.

+0

+1 za dobre wyjaśnienie różnic w czasie kompilacji i czasu pracy. – HericDenis

1

-Generics może być dorozumiana do klas, interfejsów, metod, zmiennych itp .. ale najważniejszym powodem, dla którego jego stosowany sprawia, że ​​Collectionbardziej rodzaj bezpiecznej.

-Generics upewnić, że tylko specyficzny rodzaj obiektu wchodzi i wychodzi z Collections.

- Ponadto warto wspomnieć, że jest to proces znany jako Erasure,

->Erasure jest procesem, w którym type parameters i type argumentsusunięty z ogólnych klas i interfejsów przez kompilator, czyniąc to wstecz zgodny z kodami, w których napisane bez Generics.

Więc

HashMap<String, Integer> map = new HashMap<String, Integer>();

nabiera Raw type,

HashMap map = new HashMap();

15

Są to opcje masz:

J2SE < 5.0 style:

Map map = new HashMap(); 

J2SE 5.0+ styl (wykorzystanie generics):

Map<KeyType, ValueType> map = new HashMap<KeyType, ValueType>(); 

Google Guava styl (krótsza i bardziej elastyczna):

Map<KeyType, ValueType> map = Maps.newHashMap(); 
Powiązane problemy