자바의 컨테이너에 대해 배우고 있으며 최근에 HashSet이 요소를 순서대로 제공하지 않는다는 것을 읽었습니다. 에 대한 흥미로운 점 Integer 내 임의로 만든 HashSet이 정렬됩니다. 유형을 으로 변경했을 때 인쇄 된 HashSet은 더 이상 정렬되지 않았습니다. 내 질문은 : HashSet은 다양한 유형에 대해 다르게 작동합니까?왜 HashSet이 정렬 되었습니까?
2
A
답변
2
HashSet
은 내부적으로 HashMap
을 사용합니다. HashMap
은 각 요소의 hashCode()
메서드를 사용하여 해시 테이블에 요소를 저장합니다.
는 int
및 double
를 들어, 다음은 Integer
및 Double
클래스로 auto-boxed 있습니다. HashSet
을 int
으로 만들면 Integer's hashCode() 메서드가 사용되며 이는 단지 int
을 반환합니다. 따라서 int
을 추가하면 정렬 된 상태로 저장됩니다. 그러나 double
의 경우 Double's hashCode() 메서드는 복소수가 메모리에 표시되는 방식 때문에 훨씬 더 복잡합니다.
+0
에서 확인할 수 있습니다. 이는 정수 값의 특정 작은 범위 . – Holger
1
두 해시를 해싱하면 Java는 메모리를 두 비트 모두 64 비트 값으로 변환하기 때문에이 코드를 두 번째로 변환합니다.
해시 코드를 실제로 실험하여 정수 및 배가 어떻게 작동하는지 확인할 수 있습니다.
자세한 내용 확인 : Hash a double in Java
해시 코드에 따라 다릅니다. – SLaks
해시 집합의 순서에 의존하지 마십시오. 당신이 찾은 것은 코드와 해시 기능이 구현 된 것만으로도 우연의 일치입니다. – CollinD
@CollinD 방금 for 루프를 만들고 random.nextInt()를 사용하여 HashSet에 10 000 개의 요소를 넣었습니다. – soommy12