문제

세 항목 해시 맵을 구현하는 가장 좋은 방법은 무엇입니까? 예를 들어, 일반 문자열 키를 사용하고 싶지만 두 개의 다른 객체에 매핑하도록합니다. 아이디어는 첫 번째 항목이 핵심이라는 점을 제외하고 목록 목록을 갖는 것과 같습니다.

목록을 반복하지 않으려 고 노력하고 있습니다 (따라서 동작은 해시 맵과 같습니다). 유일한 방법은 새로운 클래스를 구축하는 것입니다. "hashmap3"객체 (get1 (key) 및 get2 (key)의 메소드가 포함 된 것 같습니다. 나는 이것을 스스로 설정하는 방법을 잘 모르겠습니다.

컬렉션을 어떻게 만들 수 있습니까?

도움이 되었습니까?

해결책

키가 항상 매핑되는 경우 바로 그거죠 두 가지 물체, 그리고 가장 쉬운 방법은 Pair 두 개체를 고정하기 위해서만 존재하는 클래스. 그런 다음 문자열을 키로 사용하고 Pair 값으로 인스턴스. 그러나 키가 임의로 많은 객체에 매핑 될 수 있다면 IMO를 수행하는 가장 좋은 방법은 값을 Map a Collection 어떤 종류의.

다른 팁

Google 수집을보십시오 멀티 맵

맵과 유사하지만 여러 값을 단일 키와 연결할 수 있습니다. 동일한 키이지만 다른 값으로 Put (k, v)을 두 번 호출하면 멀티 맵에는 키에서 두 값으로 매핑이 포함되어 있습니다.

해시 해시 아마도?

나는 Eddie에 동의하고 단지 두 가지가 아닌 많은 가치만으로도 비슷한 문제를 가졌습니다. 나는 웹 서비스에서 가져온 문서의 캐시 XML을 보유하기 위해 Java 동의어를 원했고, 캐시의 퇴거 전략을 지원하기 위해 XML과 함께 다양한 정보를 녹음해야했습니다 (예 : 최근에 사용되지 않고 가장 자주 사용).

해결책은 해당 항목을 보유하는 객체 클래스를 정의하는 것이 었습니다. 캐시 클래스 내에서 개인 중첩 클래스를 사용했습니다.

private static class CacheEntry
{
    private String  uri;          // Key
    private String  fetched_xml;  // The XML document (main value)
    private long    put_time;
    private long    expires_time;
    private long    size;
    private long    hits;
    private long    last_used_time;
}

동의어 맵은 URI에 키가 늘어나고 다음과 같이 보였습니다.

private final Map<String, CacheEntry> cache;
    [...]
cache = new ConcurrentHashMap<String, CacheEntry>(100, 0.75f, 3);

이 코드는 캐시에 새 XML 문서를 추가합니다.

CacheEntry value = new CacheEntry();
value.fetched_xml(fetched_xml); 
value.uri = uri;
value.put_time = System.currentTimeMillis();
value.expires_time = representation.getExpirationDate().getTime();
value.size = bytes_fetched;
value.hits = 0;
value.last_used_time = 0;
cache.put(uri, value);

편집하다: 키를 a에 매핑 해야하는 경우 목록 Java의 N 객체 중 해당 객체를 java.util.collections.arraylist에 넣고 ArrayList를 맵 값으로 사용할 수 있습니다.

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