2016-08-30 2 views
0

내 문제는 hashMap.get (key)가 호출 될 때 내부 LinkedList에 대한 참조를 반환하는 HashMap이 필요하다는 것입니다. 단순히 키에 해당하는 값을 반환하는 것이 아닙니다.Java에서 HashMaps 및 목록 조정

내가 수집 한 것부터 보면 LinkedHashMap을 사용하면 이중 연결 목록이 충돌 처리를 위해 각지도 항목을 차지할 수 있습니다. 그러나, 나는 LinkedList를 공유하는 각 객체 (LinkedList를 공유하는 각 객체는 내 오버라이드 된 해시 코드 함수로 인해 매우 흥미있는 특정 기능을 공유 함)에 매핑 된 모든 값을 캡슐화하는 포괄적 인 LinkedList에 대한 참조를 가져올 수 있기를 원합니다.

달리 말하자면 LinkedHashMap 클래스에 내장 된 링크 된 목록 자동 탐색을 피하고 목록 자체의 참조를 조작하기를 원합니다.

linkedHashMap.put (key, value) 호출로 LinkedLists 끝에 새 값을 추가하는 기능 외에도이 참조가 반환되기를 바랍니다.

모든 포인터가 감사하겠습니다.

+0

"내가 수집 한 것으로부터, LinkedHashMap은 이중 링크 목록이 충돌 처리를 위해 각지도 항목을 차지할 수있게합니다."- 아니요, LinkedHashMap에 이름을 부여한 연결 목록은 완전히 다른 것을 수행합니다. 충돌 해소리스트는 통상의 HashMap에 있습니다. – user2357112

+0

'지도 >'?? 그게 당신의 필요에 맞는가요? 'linkedHashMap.put (key, value)'는 간단한 get과 update 단계로 수행 될 수 있습니다. (동기화되지 않으면 원자가되지 않습니다) – Antoniossss

+3

'HashMap >'을 사용하지 않는 이유는 무엇입니까? – user2357112

답변

1

LinkedHashMap은 키를 정의 된 순서대로 저장합니다 (A LinkedList은 KeySet을 백업합니다). 충돌을 어떻게 처리하는지는 아무 것도 아닙니다.

당신이 묘사 한 것에 대해, 나는 당신이 스스로를 구현해야한다고 생각합니다. 기본적으로 Map<KeyType, List<EntryType>>을 만들고 관련 목록에 추가하는 "put"함수를 사용합니다. 너무 많은 코드가 아닙니다.

설명해 주신 내용이 인터페이스와 실제로 일치하지 않기 때문에 실제로는 Map까지 확장하지 못할 수도 있습니다.

+0

Java 8에서는 ['Map # computeIfAbsent'] (https://docs.oracle.com/javase/8/docs/api/java/util/Map.html#computeIfAbsent-K-java.util)를 사용하면 훨씬 쉽습니다. (키, k -> 새로운 LinkedList <>())와 같은 것을 사용하여 추가 기능 (function.Function-)을 사용하여 추가 할 수 있습니다 : – 4castle

+0

@ 4castle 우, 그게 뭔지 몰랐습니다. 감사! –