2010-07-22 3 views
0

크기가 101 키 인 해시 맵이 있지만 그 중 약 6 개는 데이터가없고 데이터가없는 경우가 더 많을 수도 있습니다. 빈 인덱스 안에 정확히 무엇이 있습니까? 그것은 null입니까? 또는 해시 (인덱스) .isEmpty() 메서드는 그 빈 경우 볼 수 있습니까?HashMap의 빈 인덱스 안에 무엇이 있습니까?

hashmap 내에 isEmpty 메소드가 있다는 것을 알았지 만, 전체 맵이 단일 인덱스뿐만 아니라 비어있는 경우에만 확인했다고 생각했습니다.

+1

당신이 "빈"요소를 검사하는 디버거를 사용할 수있다? 나는 당신이 무엇을 요구하고 있는지 아직도 명확하지 않다. – Cambium

+0

['Map.containsKey (key)'] (http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/util/Map.html#containsKey%28java.lang. 개체 % 29)? –

+1

'HashMap' 클래스가 내부적으로 어떻게 동작하는지에 대한 질문 : JDK 설치 디렉토리에있는'src.zip'에서 소스 코드를 검색 할 수 있습니다. – Jesper

답변

0

데이터가없는 키가 도착하려면 여기에 put이 있어야합니다.

map.put(key, null)을 수행 한 경우 해당 키의 데이터는 null입니다. 메소드에 두 번째 매개 변수를 항상 지정해야합니다. 단지 map.put(key) 일 수 없습니다.

특정 키에 데이터가 없어야한다는 것을 알고 있다면 디버그 모드로 들어가서 myMap.get(myEmptyKey)에 대한 감시를 시도하고 얻은 결과를 볼 수 있습니다 (빈 개체 또는 다른 데이터가없는 경우 그걸 볼 수 있어야합니다).

편집 : 일부 코드가 당신을 도울 유용 할 수 있지만, 내가 제대로 이해한다면이 같은 것을 할 : 당신이 할 경우,

for (Object obj : list) { 
    if (matchesCriteriaX(obj)) { 
     map.put("X", obj); 
    else if (matchesCriteriaY(obj)) { 
     map.put("Y", obj); 
    } 
} 

음과 map.get("X")을하려고하지만, 실제로 넣어 결코 그 열쇠에 대한 것이면 (어떤 객체도 기준 X와 일치하지 않기 때문에), 당신은 가장 확실하게 null이 될 것입니다. 한편

, 당신은

Map<String, List<Object>> map = new HashMap<String, List<Object>>(); 
map.add("X", new ArrayList<Object>()); 
map.add("Y", new ArrayList<Object>()); 
for (Object obj : list) { 
    if (matchesCriteriaX(obj)) { 
     List<Object> list = map.get("X"); 
     list.add(obj); 
    else if (matchesCriteriaY(obj)) { 
     List<Object> list = map.get("Y"); 
     list.add(obj); 
    } 
} 

뭔가를했다면 다음 카테고리 목록 이후 map.get("x").isEmpty()을 수행하여 비어있는 경우 확인할 수 있습니다 그 방법이있다 (그리고 어떤 객체가 키를 일치하지 않는 경우는 빈 것 기준). 내가 실현

+0

기본적으로, 내 응용 프로그램은 데이터베이스에서 3300 개의 제품을 읽은 다음 특정 기준에 따라 해시의 다른 키로 매핑하므로 일부는 비어 있지만, 외부 해시를 사용하고 있기 때문에 몇 가지를 알고 있습니다. 모든 기준이 충족되지 않아 키가 비어있게됩니다. 그래서이 모든 것을 내 트리에 추가하는 루프를 실행하는 동안 빈 키를 건너 뛰고 다음 키로 이동하는 방법을 찾으려고합니다. – SomeoneRandom

+1

"두 개의 키가 비어 있습니다"라는 의미는 무엇입니까? 이 키들에 연관된 값이 없다는 것을 의미합니까? 만약 그렇다면 어떻게 hashmap에 처음에 그것을 추가 했습니까? – Cambium

+0

@SomeoneRandom 내 편집을 참조하십시오. –

1

는 해시 맵 내부 IsEmpty 함수 방법 있다, 그러나 나는 전체지도가 비어 있지 단지 하나의 인덱스 인 경우 만 확인 생각했다.

나는 당신이 찾고있는 것이 containsKey(Object) method이라고 생각합니다. 문서에 따르면

반환 true을 맵이 지정된 키의 매핑을 보관 유지하는 경우. 형식적으로 이지도에 k과 같은 매핑이 포함되어있는 경우에만 (key==null ? k==null : key.equals(k))과 같이 true을 반환합니다. (이러한 맵핑은 많아야 일 수 있습니다.)

매개 변수 : - : 맵이 지정된 키

의 매핑이 포함되어있는 경우에

true

key 키 맵에 있을지는

반환을 테스트하는 것입니다

0

당신이 말한 것으로 판단하면, 나는 이런 식으로 뭔가 의심 해요 :이 경우

Map<SomeKey, List<SomeValue>> yourMap; 

을, 당신은 무엇을 할 수

if(yourMap.contains(someKey)){ 
    List<SomeValue> someList = yourMap.get(someKey); 
    if(someList.size() == 0){ 
     // it's empty, do something? 
    } 
} 
관련 문제