2014-11-04 1 views
0

여러 키가 동일한 해시 코드를 가진 경우 충돌이 발생합니다. 이 경우 키 - 값 항목은 연결된 목록 형식으로 버킷에 매핑되어 저장됩니다. 이제는 주어진 양동이에 대해 얼마나 많은 Map.Entry 쌍이 있는지 알고 싶습니다. 내가 식별하는 데 도움이 될 inbuilt 자바 메서드가 있습니까?버킷에 얼마나 많은 키가 있는지 찾기

bucket1 ----> (10, 1) ---> (100, 2) ---이 경우 응답은 2입니다.

bucket2 ----> (2, 1) ---- 않음 1

bucket3이다 ----> (3, 5) ---> (6, 10) --- > (9, 15) ---> (12, 18) ----이 경우 응답 4.

이 문제에 도움이된다면 도움이 될 것입니다.

답변

2

지도의 값으로 컬렉션을 사용하지 않는 한 특정 버킷에 둘 이상의 값을 사용할 수 없습니다.

Bucket 1 has 2 item(s) 
Bucket 2 has 1 item(s) 
Bucket 3 has 4 item(s) 

:

import java.util.Arrays; 
import java.util.LinkedHashMap; 
import java.util.List; 
import java.util.Map; 

public class Playground { 

    public static void main(String[] args) { 
     Map<Integer, List<Pair>> map = new LinkedHashMap<Integer, List<Pair>>(); 

     map.put(1, Arrays.asList(new Pair(10, 1) , new Pair(100, 2))); 
     map.put(2, Arrays.asList(new Pair(2, 1))); 
     map.put(3, Arrays.asList(new Pair(3, 5), new Pair(6, 10), new Pair(9, 15), new Pair(12, 18))); 

     for (Map.Entry<Integer, List<Pair>> entry : map.entrySet()) { 
      System.out.println(String.format("Bucket %d has %d item(s)", entry.getKey(), entry.getValue().size())); 
     } 
    } 
} 

class Pair { 
    Integer x; 
    Integer y; 

    Pair(Integer x, Integer y) { 
     this.x = x; 
     this.y = y; 
    } 
} 

귀하의 출력은 다음이 될 것입니다 :지도에 대한 값으로 목록을 사용하여 HashMap

의 문서에 put() 무엇을 할 것인가 체크, 당신은 다음 시도 할 수 있습니다 희망이 도움이

+1

나는 내 질문 (또는 어쩌면 내가 그렇게 명확하지 않은 대답)이라고 생각하지 않습니다. 내가 버킷 크기가 5 인 해시 맵/해시 테이블이 있다고 가정합니다. 해시 코드를 계산하기 위해 해쉬 함수로 mod 5 연산자를 사용합니다. 첫 번째 5 개의 키, 즉 1,2,3,4,5는 버킷 1 ~ 5를 차지합니다. 키 6을 값과 함께 삽입하면 버킷 1에 추가됩니다. 따라서 버킷 1의 크기가 이제 2가됩니다. 내가 찾는거야. – Ram27

+0

무슨 뜻인지 알 겠어. 나는 양동이의 정보가 노출 될 것이라고 생각하지 않습니다. [소스 코드] (http://www.docjar.com/html/api/java/util/HashMap.java.html)를 빠르게 확인하면 원하는 정보가 공개적으로 제공되지 않습니다. –

+0

고마워, 그냥 같은 페이지에 있으니, addEntry/createEntry 메소드를 말하는거야? – Ram27

관련 문제