2013-06-29 2 views
-2

HashSet과 HashMap의 관계는 무엇입니까? HashMap과 HashSet의 관계

From javadoc

:

HashSet 

public HashSet() 

Constructs a new, empty set; the backing HashMap instance has default initial 

용량 (16)과 부하 계수 (0.75).

"로드 요소"는 무엇을 의미합니까? 미리 감사드립니다.

+0

http://stackoverflow.com/questions/5689517/java-hashset-vs-hashmap –

+0

http://stackoverflow.com/questions/2773824/ 해시 맵과 해시 맵의 차이점 –

+0

HashSet 용 javadoc을 읽었으며 사용중인 HashMap의로드 요소에 대해 설명했습니다. 왜 HashMap의 javadoc을 읽지 않으시겠습니까? 부하율은 분명히 여기에 설명되어 있습니다. –

답변

0

HashSet과 HashMap의 관계는 무엇입니까?

각각의 HashSet<T>에는 개인 HashMap<T, Object>이 있습니다. Java 7 버전에서 값은 private Object 인스턴스입니다.

"로드 요소"는 무엇을 의미합니까?

"부하율"이란 용어는 에서 HashMap으로 정의됩니다. 당신은 그것에 대해 읽을 수 있습니다. (즉,이 ...를 위해 작성되었다 기능)

참조 :

1

HashSetHashMap의 관점에서 구현됩니다

이 클래스는 해시 테이블 (실제로는 HashMap 인스턴스)을 백업 한 Set 인터페이스를 구현합니다.

부하율은 documentation 설명한다 : 초기 용량 및 부하 계수

의 HashMap의 인스턴스는 그 성능에 영향을주는 2 개 개의 파라미터를 갖는다. 용량은 해시 테이블의 버킷 수이며 초기 용량은 단순히 해시 테이블을 만들 때의 용량입니다. 로드 계수는 해시 테이블의 용량이 자동으로 증가하기 전에 해시 테이블이 얼마나 채워지는지 측정합니다. 해시 테이블의 항목 수가로드 요소와 현재 용량의 곱을 초과하면 해시 테이블이 약 두 배의 버킷 수를 갖도록 해시 테이블이 다시 해시됩니다 (즉, 내부 데이터 구조가 다시 작성 됨).

기본적으로 기본 부하 계수 (.75)는 시간과 공간 비용간에 좋은 균형을 제공합니다. 값이 높을수록 공간 오버 헤드가 줄어들지 만 조회 비용은 증가합니다 (get 및 put을 포함하여 HashMap 클래스의 대부분의 작업에 반영됨). rehash 조작의 수를 최소화하기 위해 초기 용량을 설정할 때 맵의 예상 항목 수와로드 요소를 고려해야합니다. 초기 용량이 최대 요소 수를로드 계수로 나눈 값보다 큰 경우, 재 처리가 수행되지 않습니다.HashSet의 소스 코드에서

0

public HashSet(Collection<? extends E> c) { 
    map = new HashMap<E,Object>(Math.max((int) (c.size()/.75f) + 1, 16)); 
    addAll(c); 
}