해시 맵의 키에서 해시 세트를 얻으시겠습니까?
문제
나는 꽤 큰 것을 가지고있다 (100'000의 출품작) HashMap
. 이제 a가 필요합니다 HashSet
이것의 모든 키를 포함합니다 HashMap
. 안타깝게도, HashMap
만 있습니다 keySet()
반환하는 방법 a Set
그러나 아닙니다 HashSet
.
그러한 생성하는 효율적인 방법은 무엇입니까? HashSet
Java 사용?
해결책
왜 특히 해시 세트가 필요한가?
모든 세트는 동일한 인터페이스를 가지므로 일반적으로 상호 교환 적으로 사용할 수 있습니다. 양호한 작업은 모두 세트 인터페이스를 사용해야합니다.
정말로 필요하다면 하나를 만들 수 있습니다. 일반 코드의 경우 다음과 같습니다.
Map<B, V> map = ...;
HashSet<B> set = new HashSet<B>(map.keySet());
다른 팁
'효율적인'이라는 단어가 질문의 핵심 부분이라고 가정하고, 세트와 관련하여하고 싶은 일에 따라 해시 세트 구현을 무시하고 기존에 대한 뷰를 제시하는 해시 세트의 하위 클래스를 만드는 아이디어 일 수 있습니다. 대신지도.
부분적으로 구현 된 예로는 다음과 같은 것처럼 보일 수 있습니다.
public class MapBackedHashSet extends HashSet
{
private HashMap theMap;
public MapBackedHashSet(HashMap theMap)
{
this.theMap = theMap;
}
@Override
public boolean contains(Object o)
{
return theMap.containsKey(o);
}
/* etc... */
}
수업이 어떻게 사용되는지 모른다면 모든 관련 방법을 무시하기 위해주의를 기울여야합니다.
HashSet myHashSet = new HashSet(myHashMap.keySet());
시도하지 않았습니다.
당신은 만들 수 없다 HashSet
기존에서 Set
? 그러나 (더 중요한 것은) 왜 당신은 keySet()
방법 ?
set set = new Hashset (map.keyset ());
제휴하지 않습니다 StackOverflow