Jestem użytkownikiem Pythona od dawna i bardzo podoba mi się sposób, w jaki używane są słowniki. Są bardzo intuicyjne i łatwe w użyciu. Czy istnieje dobry odpowiednik w Javie dla słowników Pythona? Słyszałem o ludziach używających hashmaps i hashtables. Czy ktoś mógłby wyjaśnić podobieństwa i różnice między używaniem tablic mieszających i tablic mieszających w porównaniu ze słownikami Pythona?
źródło
Idea słownika i mapy jest podobna. Oba zawierają elementy takie jak
key1:value1, key2:value2 ... and so on
W Javie
Map
zaimplementowano różne sposoby, takie jakHashMap
,TreeMap
itp.put(), get()
Operacje są podobneimport java.util.HashMap; Map map = new HashMap(); // Put elements to the map map.put("Ram", new Double(3434.34)); map.put("Krishna", new Double(123.22)); map.put("Hary", new Double(1378.00)); //to get elements map.get("Krishna"); # =123.22 map.get("Hary"); # = 1378.00
Zobacz dokumentację HashMap w java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
źródło
O ile mi wiadomo (właściwie nie używam javy), słowniki to po prostu inna nazwa dla hashmap / hashtable.
Pobieram kod z http://www.fluffycat.com/Java/HashMaps/ wydaje się, że są one używane w bardzo podobny sposób, z odrobiną dodatkowej gotowej płyty java.
źródło
Jedna różnica między nimi polega na tym, że
dict
istnieją bardziej rygorystyczne wymagania dotyczące typów danych, które mogą pełnić rolę klucza. Java pozwoli dowolnemu obiektowi działać jako klucz - chociaż należy zadbać o to, abyhashCode()
metoda obiektu zwracała unikalną wartość, która odzwierciedla jego stan wewnętrzny. Python wymaga, aby klucze pasowały do jego definicji hashable , która określa, że kod skrótu obiektu nigdy nie powinien się zmieniać w czasie jego życia.źródło
hashCode()
metodzie Javy lub w__hash__()
metodzie Pythona należy spróbować zwrócić unikalną wartość, która odzwierciedla stan wewnętrzny. W Javie lub Pythonie, jeśli masz zmienny obiekt, prawdopodobnie nie powinien to być klucz z możliwością skrótu, więc sensowne jest zgłoszenie wyjątku od metodhashCode()
lub__hash__()
.