Python 사전에 해당하는 Java


93

저는 오랫동안 Python을 사용하고 있으며 사전이 사용되는 방식을 정말 좋아합니다. 매우 직관적이고 사용하기 쉽습니다. 파이썬 사전과 동등한 Java가 있습니까? 해시 맵과 해시 테이블을 사용하는 사람들에 대해 들었습니다. 누군가 해시 테이블과 해시 맵과 파이썬 사전을 사용하는 유사점과 차이점을 설명 할 수 있습니까?

답변:


106

파이썬의 dict클래스는 파이썬 문서가 비공식적으로 " 매핑 유형 " 이라고 부르는 것을 구현 한 것 입니다. 내부적으로 dict는 해시 테이블을 사용하여 구현됩니다.

Java의 HashMap클래스는 Map인터페이스 의 구현입니다 . 내부적으로 HashMap는 해시 테이블을 사용하여 구현됩니다.

구문에는 몇 가지 사소한 차이가 있으며 구현이 약간 다르게 조정되었다고 생각하지만 전체적으로 완전히 상호 교환 할 수 있습니다.


40
제공된 예 없음 :(
Kamran Bigdely

1
@kami : 어떤 종류의 예를 원하십니까?
다니엘 Pryden

5
작동중인 파이썬 사전에 상응하는 Java를 보여주는 모든 예. 대부분의 사람들이 예제를보고 코드에서 사용하기 때문에 유용한 답변에는 몇 가지 예제가 포함됩니다.
Kamran Bigdely

13
@kami : 옳지 않다고 생각합니다. 이 질문은 "특정 Python 코드에 대해 동등한 Java 코드가 무엇인지"묻지 않습니다. 사실 질문에는 코드가 전혀 포함되어 있지 않습니다. Java에서 Map API를 사용하는 예제를 추가하면 어떤 가치가 있는지 잘 모르겠습니다. 이 답변은 이미 표준 문서에 연결되어 있습니다. Java를 배우려면 Stack Overflow가 아닌 ​​자습서로 시작하십시오. 나는이 대답이 복사 붙여 넣을 수있는 코드 샘플이 없기 때문에 반대 투표를 정당화한다고 생각하지 않습니다.
다니엘 Pryden

4
"대부분의 사람들이 예제를보고 코드에 사용하기 위해 여기에 온다"라는 주석을 읽고 슬프게도 , 이것이 잘못 되었으면합니다.
0xc0de

31

사전과지도의 아이디어는 비슷합니다. 둘 다 다음과 같은 요소를 포함합니다.

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 문서를 참조 하십시오.


5

내가 아는 한 (실제로 Java를 사용하지 않음) 사전은 해시 맵 / 해시 테이블의 또 다른 이름입니다.

http://www.fluffycat.com/Java/HashMaps/ 에서 코드를 가져 오면 약간의 추가 자바 상용구와 함께 매우 유사한 방식으로 사용되는 것 같습니다.


3
Java에는 Hashtable에 의해 구현 된 Dictionary 인터페이스도 있습니다. 그러나 HashMap이 일반적으로 선호됩니다.
Michael Myers

1
@Michael 마이어스 : 사전되지 않습니다, 오라클은지도 대신 사용하는 것이 좋습니다 docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html
Broken_Window

5

둘 사이의 한 가지 차이점은 dict키 역할을 할 수있는 데이터 유형에 대한 요구 사항이 더 엄격 하다는 것입니다. Java는 모든 객체가 키로 작동하도록 허용하지만 객체의 hashCode()메서드가 내부 상태를 반영하는 고유 한 값을 반환 하도록주의해야합니다 . Python은 hashable 정의에 맞는 키가 필요합니다 . 이는 객체의 해시 코드가 수명 동안 절대 변경되지 않도록 지정합니다.


1
이것은 사실이지만 실제로 두 언어에 의해 시행되지는 않습니다. 분명히 Java hashCode()메서드 나 Python __hash__()메서드에서 내부 상태를 반영하는 고유 한 값을 반환해야합니다. Java 또는 Python에서 변경 가능한 객체가있는 경우 해시 테이블 키가 아니어야하므로 hashCode()또는 __hash__()메서드 에서 예외를 throw하는 것이 좋습니다 .
Daniel Pryden

1
내 경험상, 파이썬의 거의 모든 것이 dict 키가 될 수 있습니다 ... '더 엄격한 요구 사항'은 무엇입니까?
Ron Kalian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.