2016-08-15 3 views
3

LinkedHashMapHashMap입니다. 방법 put()은 코드 LinkedHashMap.java에 없습니다. 그래서 아래의 프로그램에서 put() 메서드를 호출 할 수 있다면 put() 메서드를 HashMap에서 상속 받아야한다고 생각합니다.LinkedHashMap의 put() 메소드를 호출 한 후 'before'및 'after'변수가 업데이트되는 방식은 무엇입니까?

import java.util.*; 
class First 
{ 
     public static void main(String[] args) 
     { 
       LinkedHashMap<Key, String> h=new LinkedHashMap<>(7); 
       h.put(new Key(3), "Hi"); 
       h.put(new Key(1), "Hello"); 
       h.put(new Key(9), "hru"); 
       System.out.println(h); 
     } 
} 

Key.java은 다음과 같습니다 http://a.disquscdn.com/uploads/mediaembed/images/3751/7481/original.jpg

그러나 HashMap에서 put() 방법은 인식되지 않습니다 :

class Key 
{ 
     int i = 0; 
     Key(int i) 
     { 
       this.i=i; 
     } 
     public int hashCode() 
     { 
       return i; 
     } 
     public String toString() 
     { 
       return i+""; 
     } 
} 

그것은 삽입 순서를 유지하기 위해 참조 '하기 전에' '후'유지하는 데 필요한 이 변수 중 그런 다음 put()에서 이러한 변수를 어떻게 유지합니까?

또한 HashMap 또는 LinkedHashMap 코드에서 createEntry() 메서드를 찾을 수 없습니다.

내가 사용하고 있습니다 :

java version "1.8.0_91" 
Java(TM) SE Runtime Environment (build 1.8.0_91-b14) 
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode) 

답변

6

LinkedHashMap 무시 HashMap 같은 put 등의 운영 및 remove에 의해 (간접적으로)라는 콜백 방법이 있습니다 :

// Callbacks to allow LinkedHashMap post-actions 
void afterNodeAccess(Node<K,V> p) { } 
void afterNodeInsertion(boolean evict) { } 
void afterNodeRemoval(Node<K,V> p) { } 

LinkedHashMap는 이중 연결 유지할 수는 항목 목록, HashMap에 대해선 아무것도 모릅니다. 이러한 방법 외에도

, LinkedHashMap 무시 newNode()beforeafter 참조를 포함하는, LinkedHashMap.Entry의 인스턴스를 반환합니다.

는 편집 :

Keys 클래스를보고, 당신이 당신이 당신의 LinkedHashMap에 중복 키를 추가 할 수 있습니다 의미 equals를 오버라이드 (override)하는 것을 잊었다 나타납니다.

+0

@KevinEsche Keys 클래스가 방금 질문에 추가되었으므로 답을 수정하겠습니다. – Eran