JavaTM Platform
Standard Ed. 6

java.util
클래스 LinkedHashMap<K, V>

java.lang.Object 
  상위를 확장 java.util.AbstractMap <K, V>
      상위를 확장 java.util.HashMap <K, V>
          상위를 확장 java.util.LinkedHashMap<K, V>
형태 파라미터:
K - 이 맵이 보관 유지하는 키의 형태
V - 맵 되는 값의 형태
모든 구현된 인터페이스:
Serializable , Cloneable , Map <K, V>


public class LinkedHashMap<K, V>
extends HashMap <K, V>
implements Map <K, V>

예측 가능한 반복 순서를 가지는 Map 인터페이스의 해시 테이블과 링크 리스트의 구현입니다. 이 구현은, 모든 구현의 엔트리를 거치는 이중의 링크 리스트를 보관 유지한다고 하는 점으로써,HashMap 와는 다릅니다. 링크 리스트는, 반복 순서를 정의합니다. 이 순서는, 일반적으로 키가 맵에 삽입된 순서입니다 (삽입순서) . 키를 맵에 「재삽입」하는 경우, 삽입순서는 영향을 받지 않습니다. 호출의 직전에,m.containsKey(k)true 를 돌려줄 때 m.put(k, v) 가 불려 갔을 경우, 키 k 가 맵 m 에 재삽입됩니다.

이 구현에서는,TreeMap 관련의 부담의 증대를 지지 않고 ,HashMapHashtable 에 의한, 무지정된 일반적으로는 무질서한 순서로부터 클라이언트를 지킵니다. 이 구현을 사용해, 당초의 맵의 구현에 관계없이, 당초와 같은 순서를 가지는 맵의 카피를 생성할 수가 있습니다.

void foo(Map m) {
Map copy = new LinkedHashMap(m);
         ...
     }
 
모듈이 입력의 맵을 취득해, 카피해, 카피의 맵이 설정한 순서의 결과를 돌려주었을 경우, 이 기술은 특별히 도움이 됩니다. 일반적으로, 클라이언트는 제시와 같은 순서로 반환되는 것을 평가합니다.

특별한생성자 이, 링크 해시 맵 작성을 위해 제공됩니다. 이 맵의 반복 순서는, 마지막에 엔트리에 액세스 한 순서가 됩니다. 순서는 가장 전에 액세스 한 것으로부터 시작되어, 가장 후에 액세스 한 것으로 끝납니다 (액세스순서). 이런 종류의 맵은, LRU 캐쉬를 구축하는데 최적입니다. put 또는 get 메소드를 호출하면(자), 대응하는 엔트리에 액세스 합니다 (호출 완료 후에, 대응하는 엔트리가 있으면(자) 가정합니다). 키치 매핑이 지정된 맵의 엔트리 세트 반복자에 의해 제공되는 순서로,putAll 메소드는, 지정된 맵의 매핑 마다 엔트리 액세스를 1 개 생성합니다. 엔트리 액세스를 생성하는 메소드는 그 밖에 없습니다. 특히는 코레크션뷰에 대한 오퍼레이션은, 바탕으로 되는 맵의 반복 순서에는 영향을 주지 않습니다.

맵에 새로운 매핑을 추가할 때, 자동적으로 무효인 매핑을 삭제하는 정책를 규정하기 위해서,removeEldestEntry(Map.Entry) 메소드가 오버라이드(override) 되는 경우가 있습니다.

이 클래스는, 옵션의 Map 오퍼레이션을 모두 제공해, null 요소를 허용 합니다. HashMap 와 같이, 해쉬 함수가 복수의 버킷에 적절히 요소를 분산하면(자) 가정해, 기본의 오퍼레이션 (add,contains, 및 remove)에 일정시간의 퍼포먼스를 제공합니다. 퍼포먼스는, 1 개의 예외를 제외해, 링크 리스트를 보관 유지하는 부담의 증대에 의해,HashMap 의 퍼포먼스보다 조금 뒤떨어지는 경우가 있습니다. LinkedHashMap 의 코레크션뷰의 반복에는, 용량에 관계없이, 맵의 「사이즈」에 비례한 시간이 필요하게 됩니다. 「용량」에 비례한 시간을 필요로 하므로,HashMap 의 반복은, 한층 더 비싸게 들 우려가 있습니다.

링크 해시 맵에는, 퍼포먼스에 영향을 미치는 파라미터가 2 개 있습니다. 「초기 용량」과「부하 계수」입니다. 이러한 파라미터는,HashMap 에 대해 정확하게 정의되고 있습니다. 다만, 이 클래스의 반복 회수는 용량에 의해 영향을 받지 않기 때문에, 초기 용량에 매우 비싼 값을 선택해도, 이 클래스에서는 HashMap 에 비해 그만큼 결과는 몹시는 없습니다.

이 구현은 동기화 되지 않습니다. 복수의 thread가 동시에 링크 해시 세트에 액세스 해, 그러한 thread의 적어도 1 개(살)이 구조적으로 맵을 변경하는 경우에는, 외부에서 동기를 잡을 필요가 있습니다. 일반적으로, 구조적인 변경은, 맵을 자연스럽게 캡슐화하는 특정의 객체로 동기를 잡는 것에 의해 달성됩니다. 이런 종류의 객체가 없는 경우에는,Collections.synchronizedMap 메소드를 사용해 맵을 「랩」할 필요가 있습니다. 맵에의 우발적인 비동기 액세스를 막기 위해서(때문에), 작성시에 실시하는 것이 최적입니다.

Map m = Collections.synchronizedMap(new LinkedHashMap(...));
구조적인 변경은, 1 개(살) 또는 복수의 매핑을 추가 또는 삭제해, 링크 해시 맵이 액세스순서의 경우는, 반복의 순서에 영향을 주는 오퍼레이션입니다. 링크 해시 맵이 삽입순서의 경우는, 맵에 포함 끝난 키에 관련하는 값을 단지 변경하는 것은, 구조의 수정이 아닙니다. 링크 해시 맵이 액세스순서의 경우는,get 에 의해 맵을 단지 조회하는 것은, 구조의 변경이 됩니다.

이 클래스의 모든 코레크션뷰메소드에 의해 반환되는 컬렉션의 iterator 메소드에 의해 반환되는 반복자는, 「fail-fast」입니다. 반복자의 작성 후에, 반복자 자체의 remove 메소드 이외 방법으로 맵이 구조적으로 변경되면(자), 반복자는 ConcurrentModificationException 를 throw 합니다. 이와 같이, 병행해 변경을 하면(자), 반복자는, 장래의 예측할 수 없는 시점에 있어 예측할 수 없는 동작이 발생하는 위험을 회피하기 위해서, 즉시 한편 솜씨 자주(잘) 예외를 throw 합니다.

일반적으로, 비동기의 병행 변경이 있는 경우, 확실한 보증을 실시하는 것은 불가능해서, 반복자의 fail-fast의 동작을 보증할 수 없습니다. fail-fast 반복자는 최선 노력 원칙에 근거해,ConcurrentModificationException 를 throw 합니다. 따라서, 정확을 기하기 위해서 이 예외에 의존하는 프로그램을 쓰는 것은 잘못입니다. 「반복자의 fail-fast의 동작은 버그를 검출하기 위해서 사용해야 합니다」.

이 클래스는,Java Collections Framework 의 멤버입니다.

도입된 버젼:
1.4
관련 항목:
Object.hashCode() , Collection , Map , HashMap , TreeMap , Hashtable , 직렬화 된 형식

상자의 클래스의 개요
 
클래스 java.util. AbstractMap 로부터 상속된 상자의 클래스/인터페이스
AbstractMap.SimpleEntry <K ,V >, AbstractMap.SimpleImmutableEntry <K ,V >
 
생성자 의 개요
LinkedHashMap ()
          디폴트의 초기 용량 (16)과 부하 계수 (0.75)로 빈 상태(empty)의 삽입순서 LinkedHashMap 인스턴스를 작성합니다.
LinkedHashMap (int initialCapacity)
          지정된 초기 용량과 디폴트의 부하 계수 (0.75)로 빈 상태(empty)의 삽입순서 LinkedHashMap 인스턴스를 작성합니다.
LinkedHashMap (int initialCapacity, float loadFactor)
          지정된 초기 용량과 부하 계수로 빈 상태(empty)의 삽입순서 LinkedHashMap 인스턴스를 작성합니다.
LinkedHashMap (int initialCapacity, float loadFactor, boolean accessOrder)
          지정된 초기 용량, 부하 계수, 및 순서 모드로, 빈 상태(empty)의 LinkedHashMap 인스턴스를 작성합니다.
LinkedHashMap (Map <? extends K ,? extends V > m)
          지정된 Map 와 같은 매핑으로 삽입순서의 LinkedHashMap 인스턴스를 작성합니다.
 
메소드의 개요
 void clear ()
          모든 매핑을 맵으로부터 삭제합니다.
 boolean containsValue (Object  value)
          맵이 1 개 또는 복수의 키와 지정된 값을 매핑 하고 있는 경우에 true 를 돌려줍니다.
 V get (Object  key)
          지정된 키가 맵 되고 있는 값을 돌려줍니다.
protected  boolean removeEldestEntry (Map.Entry <K ,V > eldest)
          이 맵이 제일 낡은 엔트리를 삭제하는 경우,true 를 돌려줍니다.
 
클래스 java.util. HashMap 로부터 상속된 메소드
clone , containsKey , entrySet , isEmpty , keySet , put , putAll , remove , size , values
 
클래스 java.util. AbstractMap 로부터 상속된 메소드
equals , hashCode , toString
 
클래스 java.lang. Object 로부터 상속된 메소드
finalize , getClass , notify , notifyAll , wait , wait , wait
 
인터페이스 java.util. Map 로부터 상속된 메소드
containsKey , entrySet , equals , hashCode , isEmpty , keySet , put , putAll , remove , size , values
 

생성자 의 상세

LinkedHashMap

public LinkedHashMap(int initialCapacity,
                     float loadFactor)
지정된 초기 용량과 부하 계수로 빈 상태(empty)의 삽입순서 LinkedHashMap 인스턴스를 작성합니다.

파라미터:
initialCapacity - 초기 용량
loadFactor - 부하 계수
예외:
IllegalArgumentException - 초기 용량이 부일까 부하 계수가 정이 아닌 경우

LinkedHashMap

public LinkedHashMap(int initialCapacity)
지정된 초기 용량과 디폴트의 부하 계수 (0.75)로 빈 상태(empty)의 삽입순서 LinkedHashMap 인스턴스를 작성합니다.

파라미터:
initialCapacity - 초기 용량
예외:
IllegalArgumentException - 초기 용량이 부의 경우

LinkedHashMap

public LinkedHashMap()
디폴트의 초기 용량 (16)과 부하 계수 (0.75)로 빈 상태(empty)의 삽입순서 LinkedHashMap 인스턴스를 작성합니다.


LinkedHashMap

public LinkedHashMap(Map <?  extends K ,?  extends V > m)
지정된 Map 와 같은 매핑으로 삽입순서의 LinkedHashMap 인스턴스를 작성합니다. LinkedHashMap 인스턴스는, 지정된 Map 의 매핑을 보관 유지하는데 충분한 디폴트의 부하 계수 (0.75) , 및 초기 용량으로 작성됩니다.

파라미터:
m - 매핑이 이 맵에 배치되는 맵
예외:
NullPointerException - 지정된 맵이 null 의 경우

LinkedHashMap

public LinkedHashMap(int initialCapacity,
                     float loadFactor,
                     boolean accessOrder)
지정된 초기 용량, 부하 계수, 및 순서 모드로, 빈 상태(empty)의 LinkedHashMap 인스턴스를 작성합니다.

파라미터:
initialCapacity - 초기 용량
loadFactor - 부하 계수
accessOrder - 순서부 모드 - 액세스 유순한들 true. 삽입 유순한들false
예외:
IllegalArgumentException - 초기 용량이 부일까 부하 계수가 정이 아닌 경우
메소드의 상세

containsValue

public boolean containsValue(Object  value)
맵이 1 개 또는 복수의 키와 지정된 값을 매핑 하고 있는 경우에 true 를 돌려줍니다.

정의:
인터페이스 Map <K ,V > 내의 containsValue
오버라이드(override):
클래스 HashMap <K ,V > 내의 containsValue
파라미터:
value - 맵에 있을지 어떨지를 판정되는 값
반환값:
맵이 1 개 또는 복수의 키와 지정된 값을 매핑 하고 있는 경우는 true

get

public V  get(Object  key)
지정된 키가 맵 되고 있는 값을 돌려줍니다. 그 키의 매핑이 이 맵에 포함되지 않은 경우는 null 를 돌려줍니다.

즉, 이 메소드는,(key==null ? k==null : key.equals(k)) 가 되는 키 k 로부터 값 v 에의 매핑이 이 맵에 포함되어 있는 경우는 v 를 돌려주어, 그 이외의 경우는 null 를 돌려줍니다. 이러한 매핑이 1 개만 있습니다.

반환값의 null 는, 맵이 키의 매핑을 보관 유지하고 있지 않는 것을 나타낸다고는인가 선. 즉, 맵이 명시적으로 키를 null 에 맵 하는 일도 있습니다. containsKey 오퍼레이션을 사용하면(자), 이 2 개의 경우를 구별할 수 있습니다.

정의:
인터페이스 Map <K ,V > 내의 get
오버라이드(override):
클래스 HashMap <K ,V > 내의 get
파라미터:
key - 관련지을 수 있었던 값이 반환되는 키
반환값:
지정된 키가 맵 되고 있는 값. 그 키의 매핑이 이 맵에 포함되지 않은 경우는 null
관련 항목:
HashMap.put(Object, Object)

clear

public void clear()
모든 매핑을 맵으로부터 삭제합니다. 이 호출이 돌아오면(자), 맵은 비웁니다.

정의:
인터페이스 Map <K ,V > 내의 clear
오버라이드(override):
클래스 HashMap <K ,V > 내의 clear

removeEldestEntry

protected boolean removeEldestEntry(Map.Entry <K ,V > eldest)
이 맵이 제일 낡은 엔트리를 삭제하는 경우,true 를 돌려줍니다. 새로운 엔트리를 맵에 삽입하면(자),putputAll 에 의해 이 메소드가 불려 갑니다. 새로운 엔트리가 추가될 때마다, 이 메소드는 제일 낡은 엔트리를 삭제할 기회를 구현 측에 제공합니다. 이것은, 맵이 캐쉬를 나타내는 경우에 유효합니다. 그것에 의해, 무효가 된 엔트리를 삭제해, 맵이 메모리 소비를 저감 할 수가 있습니다.

샘플 사용:이 오버라이드(override)에 의해, 맵이 엔트리를 최대 100까지 증가시킬 수가 있어 엔트리수 100 의 정상 상태를 유지해, 새로운 엔트리가 추가될 때마다 제일 낡은 엔트리를 삭제할 수가 있습니다.

private static final int MAX_ENTRIES = 100;

protected boolean removeEldestEntry(Map.Entry eldest) {
return size() > MAX_ENTRIES;
     }
 

일반적으로 이 메소드는 맵을 수정하지 않습니다. 대신에, 반환값의 지시 대로에 맵에 맵 자체를 수정시킵니다. 이 메소드가 맵을 직접 수정할 수 있도록(듯이) 합니다. 다만, 수정했을 경우는,false 를 돌려줄 필요가 있습니다. 이것은, 맵이 그 이상의 수정을 시도하지 않는 것을 나타냅니다. 이 메소드내로부터의 맵 수정 후에 true 를 돌려주는 효과는 미지정입니다.

이 구현은,false 를 돌려줄 뿐입니다. 그 때문에, 이 맵은 일반적으로의 맵과 같이 작용합니다. 제일 낡은 요소는 삭제되지 않습니다.

파라미터:
eldest - 가장 이전에 맵에 삽입된 엔트리. 다만, 이것이 액세스순서 맵인 경우는 가장 이전에 액세스 된 엔트리. 이것은, 이 메소드가 true 를 돌려주었을 경우에 삭제되는 엔트리이다. 이 호출의 원인이 된 put 또는 putAll 호출을 하기 전에 맵이 빈 상태(empty)에서 만났을 경우, 이것은 삽입된지 얼마 안된 엔트리가 된다. 즉, 맵에 단일의 엔트리가 포함되어 있는 경우, 가장 낡은 엔트리는 가장 새로운 엔트리이기도 하다
반환값:
가장 낡은 엔트리를 맵으로부터 삭제해야 할 경우는 true. 그 엔트리를 보관 유지해야 할 경우는 false

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.