2010-12-28 8 views
0

Java에서 2 개의 Map을 가지고 있다고 가정 해 봅시다. map1의 ​​키를 map2의 키와 비교하여 2 개의 맵에 유사한 키가 있는지 확인하려고합니다.다른 해시 맵의 키를 비교하십시오.

어떻게 할 수 있습니까?

+1

"smiler keys"란 무엇을 의미합니까? –

+0

은 루프를 사용하여 모든 달의 날짜를지도의 키에 매핑하는 것을 의미합니다. 그리고이 날짜에는 다른 값이 있습니다. 그 값을지도의 값으로 넣으십시오. 이제 키와 날짜로 값을 포함하는 또 다른지도가 있습니다. 그래서 나는 similer 날짜가있는 2 개의 맵을 비교하고 싶다. – Chamal

답변

7

당신은지도 수정하지 않는 경우 :

boolean thereAreCommonKeys = !Collections.disjoint(one.keySet(), two.keySet()); 

을 공통 키 찾기 :

Set<K> commonKeys = new HashSet<K>(one.keySet()); 
commonKeys.retainAll(two.keySet()); 

키가 일 경우여야합니다.,이 경우 HashSet 대신 TreeSet을 사용하는 것이 좋습니다. TreeSet을 순서대로 유지하기 때문입니다.

+0

그렇다면 어떻게 그 연기 열쇠를 인쇄 할 수 있습니까? 부울 값을 반환합니다 – Chamal

+1

글쎄, 당신은 다른 키가 있는지 알고 싶었습니다;) –

+1

그가 했어요. 그리고 그것은 저에게 그의 말에서 질문자를 데려가도록 가르쳐 줄 것입니다. 그에 따라 편집 됨. –

1

그런가요? 당신이 M1에서 제거하지 않는 싶은 경우에 당신이 할 수있는이 m3 = 새 (M1)

Map<Integer, Integer> m1 = new HashMap<Integer, Integer>(); 
Map<Integer, Integer> m2 = new HashMap<Integer, Integer>(); 

m1.put(1, 2); 
m1.put(2, 3); 

m2.put(1, 3); 
m2.put(3, 4); 

Map<Integer, Integer> m3 = new HashMap<Integer, Integer>(m1); 


Set s1 = m1.keySet(); 
Set s2 = m2.keySet(); 

System.out.println(s1); 
System.out.println(s2); 
System.out.println(s1.retainAll(s2)); 
System.out.println(s1); 
System.out.println(s2); 
System.out.println(m1); 
System.out.println(m3); 
+0

이렇게하면 m1에서 항목이 제거됩니다. –

0
boolean hasOverlap = m1.keySet().retainAll(m2.keySet()); 
+1

이렇게하면 m1에서 항목이 제거됩니다. –

+0

아니, 이건 내가 다른 곳에서 사용되지 않는 m1에서 가져온 keySet에서 항목을 제거합니다; – Robokop

+1

Wrong : 키셋에서 요소를 제거하면 기본 맵 *에서 해당 항목이 제거됩니다. javadoc를 확인하십시오. –

관련 문제