내장 된 java.util.hashtable을 사용하여 프로그램을 만들었지 만 별도의 연결을 사용하여 충돌을 해결해야합니다. 이 해시 테이블 구현이 가능합니까? 이미 별도의 체인을 사용하는 구현 된 이미 있나요?별도의 체인 충돌 해결 기능이있는 Java 해시 테이블?
2
A
답변
4
Hashtable 구현의 source에서 보면 이미 별도의 연결을 사용하고있는 것처럼 보입니다. Entry<K,V>
클래스를 901 행에서 보면, next
이라는 다른 항목에 대한 참조가 있음을 알 수 있습니다. 그런 다음 put()
메소드를 보면 420 행에 이전에 해당 버킷에 저장된 요소가되도록 next
참조가 생성자를 통해 채워집니다.
일반적으로 이와 같은 구현 세부 사항에 대해서는 염려하지 않아야합니다. Java Collections Framework은 아마도 Java에서 가장 널리 사용되는 프레임 워크 중 하나 일 수 있습니다. 따라서 제작자가 성능을 원하는만큼 좋게 조정했다고 가정해야합니다.
내가 지적하고자하는 한 가지 다른 점은 Hashtable 클래스가 대부분 HashMap
클래스로 대체되었다는 점입니다.이 클래스도 별도의 연결을 사용합니다 (here 참조). 두 가지 주요 차이점은 Hashtable
에있는 모든 메서드가 동기화되는 반면 HashMap
에는 그렇지 않다는 것입니다. 단일 스레드 환경에서 실행되는 상황에서 성능이 향상됩니다 (이 질문의 원인 일 수 있음).
당신이이 스레드 안전지도의 구현을 필요로 할 경우에, 당신은 고려해야 중 Collections.synchronizedMap()
에 대한 호출에서 정상 HashMap
포장, 또는 ConcurrentHashMap
를 사용하여.