저는 오랫동안 Python을 사용하고 있으며 사전이 사용되는 방식을 정말 좋아합니다. 매우 직관적이고 사용하기 쉽습니다. 파이썬 사전과 동등한 Java가 있습니까? 해시 맵과 해시 테이블을 사용하는 사람들에 대해 들었습니다. 누군가 해시 테이블과 해시 맵과 파이썬 사전을 사용하는 유사점과 차이점을 설명 할 수 있습니까?
답변:
사전과지도의 아이디어는 비슷합니다. 둘 다 다음과 같은 요소를 포함합니다.
key1:value1, key2:value2 ... and so on
자바에서 Map
같은 다른 방법을 구현 HashMap
하거나 TreeMap
등의 put(), get()
작업과 유사하다
import 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
java8 https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html 의 HashMap 문서를 참조 하십시오.
내가 아는 한 (실제로 Java를 사용하지 않음) 사전은 해시 맵 / 해시 테이블의 또 다른 이름입니다.
http://www.fluffycat.com/Java/HashMaps/ 에서 코드를 가져 오면 약간의 추가 자바 상용구와 함께 매우 유사한 방식으로 사용되는 것 같습니다.
둘 사이의 한 가지 차이점은 dict
키 역할을 할 수있는 데이터 유형에 대한 요구 사항이 더 엄격 하다는 것입니다. Java는 모든 객체가 키로 작동하도록 허용하지만 객체의 hashCode()
메서드가 내부 상태를 반영하는 고유 한 값을 반환 하도록주의해야합니다 . Python은 hashable 정의에 맞는 키가 필요합니다 . 이는 객체의 해시 코드가 수명 동안 절대 변경되지 않도록 지정합니다.
hashCode()
메서드 나 Python __hash__()
메서드에서 내부 상태를 반영하는 고유 한 값을 반환해야합니다. Java 또는 Python에서 변경 가능한 객체가있는 경우 해시 테이블 키가 아니어야하므로 hashCode()
또는 __hash__()
메서드 에서 예외를 throw하는 것이 좋습니다 .