문제

나는 꽤 큰 것을 가지고있다 (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 ());

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top