2014-05-13 3 views
7

내가, 내가 documentation에 호기심을 읽을 수 있어요 :hashmap의 용량을 알아내는 방법?

용량이 해시 테이블의 버킷 수는 ... 하중 계수는 해시 테이블 전에 득점하는 방법을 전체의 측정은 용량이 자동으로 증가합니다. 해시 테이블의 항목 수가로드 요소와 현재 용량의 곱을 초과하면 해시 테이블이 약 두 배의 버킷 수를 갖도록 해시 테이블이 다시 해시됩니다 (즉, 내부 데이터 구조가 다시 작성 됨).

인스턴트 t에서 해시 맵의 용량 (버킷 수)을 알 수있는 방법이 있습니까?

+0

이 필요합니다. 당신은 반사를 통해 갈 수 있습니다. 그러나 해시 맵의 용량을 확보 할 필요는 없습니다. 크기는 모든 요구 사항을 만족합니다 – Sanjeev

답변

10

당신은 아니, 사용할 수없는 반사에게

HashMap m = new HashMap(); 
Field tableField = HashMap.class.getDeclaredField("table"); 
tableField.setAccessible(true); 
Object[] table = (Object[]) tableField.get(m); 
System.out.println(table == null ? 0 : table.length); 
+0

결과는 0입니다. Java 1.7에서 테스트했습니다. hashmap에 대한 초기 용량이 16이므로 반환 값은 16이어야합니다. –

+1

1.7에서는 게으르 게 보입니다. 시도해보십시오 \t \t HashMap m = new HashMap(); \t \t m.put (1, 1); –

+0

Great Thanks :) 해시 맵에 항목 (키, 값)을 넣지 않고 초기 용량을 0으로 유지하고 기본 용량이 16이 아닌 경우 java 1.7 이상을 의미합니까 ?? –

4

online API을 보면 공개적으로 사용할 수있는 방법이 없다는 것을 알 수 있습니다. 항상 반성은 있지만 권장하지는 않습니다.

어쨌든 대부분의 경우 의존해서는 안되는 구현 세부 사항으로 간주 될 수 있습니다.

1

HashMap에는 공개 방법이 없습니다.

IDE에서 디버그 모드을 사용하여 HashMap.table을 볼 수 있습니다.

더하기 : Sanjeev가 언급했듯이 리플렉션이 옵션입니다.