|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요 : 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Objectjava.util.AbstractMap <K, V>
java.util.WeakHashMap<K, V>
K
- 이 맵이 보관 유지하는 키의 형태V
- 맵 되는 값의 형태public class WeakHashMap<K, V>
해시 테이블에 근거한 「약키」에 의한 Map 구현입니다. WeakHashMap 내의 엔트리는, 그 키가 보통으로 사용되는 것이 없어지면(자) 자동적으로 삭제됩니다. 보다 정확하게는, 지정된 키의 매핑이 존재해도, 가비지 컬렉터가 키를 파기하는 것을 막을 수 없습니다. 즉 가비지 컬렉터가, 그 키를 finalize 가능하게 해, finalize 하고 나서 회수하는 것을 막을 수 없습니다. 키가 파기되었을 경우, 그 엔트리가 사실상 맵으로부터 삭제되므로, 이 클래스는 다른 Map 구현과는 조금 다른 동작을 합니다.
null 치와 null 키는 어느쪽이나 지원되고 있습니다. 이 클래스는 HashMap 클래스와 같은 퍼포먼스 특성을 가져, 초기 용량과 부하 계수의 같은 효율 파라미터를 가집니다.
대부분의 컬렉션 클래스와 같이, 이 클래스는 동기화 되고 있지 않습니다. 동기화 되고 있는 WeakHashMap 는 Collections.synchronizedMap
메소드를 사용해 작성할 수 있습니다.
이 클래스는,equals 메소드가 == 연산자를 사용해 객체 식별 정보를 판정하는 키 객체와 함께 사용하는 것을 주된 목적으로 하고 있습니다. 이러한 키가 파기되면(자) 다시 두 번 다시 만들 것은 없기 때문에, 후에 WeakHashMap 내의 그 키의 검색을 행해, 그 엔트리가 삭제되고 있었던 것에 놀라는 것 같은 사태는 일어날 수 없습니다. 이 클래스는,String 인스턴스등의 객체 식별 정보에 근거하지 않는 equals 메소드를 가지는 키 객체도 적절히 처리합니다만, 그러한 다시 만들어 가능한 키 객체에서는, 이미 키가 파기된 WeakHashMap 엔트리의 자동적인 삭제에 의해, 혼란이 생기는 경우가 있습니다.
WeakHashMap 클래스의 동작의 일부는 가비지 컬렉터의 액션에 의존하므로, 잘 알려져 있어도 필요하지 않는, 몇개의 Map 인 변형은 이 클래스에 적절하지 않습니다. 가비지 컬렉터는 키를 언제라도 파기할 수 있으므로,WeakHashMap 는 미지의 thread가 엔트리를 삭제중인것 같이 동작합니다. 특히,WeakHashMap 인스턴스로 동기시켜, 그 변이 메소드의 어느 것도 호출하지 않는으로 해도,size 메소드는 보다 작은 값을 시간의 경과와 함께 돌려줄 수가 있어isEmpty 메소드는 지정된 키에 대해서 false 를 돌려주고 나서 true 를 돌려줄 수가 있습니다. containsKey 메소드는,true 를 돌려준 후에 false 를 돌려줄 수가 있습니다. get 메소드는 지정된 키에는 값을 돌려준 후에 null 를 돌려줄 수가 있어put 메소드와 remove 메소드는 종래 맵에 있는 것처럼 보인 키에 대해서 각각 null 와 false 를 돌려줄 수가 있습니다. 키 세트, 값컬렉션, 엔트리 세트를 계속해 검사하면 연속적으로 출력하는 요소의 수가 적어도 됩니다.
WeakHashMap 내의 각 키 객체는 약참조의 대상으로 해 간접적으로 포함되고 있습니다. 이 때문에, 키는, 그에 대한 약참조가 맵의 내외 모두 가비지 컬렉터에 의해 클리어 되고 나서 마셔 자동적으로 삭제됩니다.
구현상의 주의:WeakHashMap 내의 값객체는, 일반적으로의 강참조에 의해 보관 유지됩니다. 이 때문에, 값의 객체가 직접적으로도 간접적으로도 강하게 그 자체의 키를 참조하지 않게 해 주세요. 그러면, 키가 파기되지 않게 됩니다. 값의 객체가 WeakHashMap 자체를 개입시켜 그 키를 간접적으로 참조하도록 해 주세요. 즉, 값의 객체는 다른 키 객체를 반드시 참조해, 그 관련지을 수 있고 있는 값의 객체가 이번은 최초의 값의 객체의 키를 반드시 참조합니다. 이것에 대처하는 방법의 1 개는,m.put(key, new WeakReference(value)) 와 같이, 값자체를 WeakReference 내에 랩 한 후에 삽입하는 것입니다. 그리고,get 를 호출할 때마다 그 랩을 해제합니다.
이 클래스의 모든 「코레크션뷰메소드」에 의해 반환되는 컬렉션의 iterator 메소드에 의해 반환되는 반복자는, 「fail-fast」입니다. 반복자의 작성 후에, 반복자 자체의 remove 메소드 이외 방법으로 맵이 구조적으로 변경되면(자), 반복자는 ConcurrentModificationException
를 throw 합니다. 이와 같이, 병행해 변경을 하면(자), 반복자는, 장래의 예측할 수 없는 시점에 있어 예측할 수 없는 동작이 발생하는 위험을 회피하기 위해서, 즉시 한편 솜씨 자주(잘) 예외를 throw 합니다.
일반적으로, 비동기의 병행 변경이 있는 경우, 확실한 보증을 실시하는 것은 불가능해서, 반복자의 fail-fast의 동작을 보증할 수 없습니다. fail-fast 반복자는 최선 노력 원칙에 근거해,ConcurrentModificationException 를 throw 합니다. 따라서, 정확을 기하기 위해서 이 예외에 의존하는 프로그램을 쓰는 것은 잘못입니다. 「반복자의 fail-fast의 동작은 버그를 검출하기 위해서 사용해야 합니다」
이 클래스는,Java Collections Framework 의 멤버입니다.
HashMap
,
WeakReference
상자의 클래스의 개요 |
---|
클래스 java.util. AbstractMap 로부터 상속된 상자의 클래스/인터페이스 |
---|
AbstractMap.SimpleEntry <K ,V >, AbstractMap.SimpleImmutableEntry <K ,V > |
생성자 의 개요 | |
---|---|
WeakHashMap ()
디폴트의 초기 용량 (16)과 부하 계수 (0.75)를 가지는, 새로운 빈 상태(empty)의 WeakHashMap 를 작성합니다. |
|
WeakHashMap (int initialCapacity)
지정된 초기 용량과 디폴트의 부하 계수 (0.75)를 가지는, 새로운 빈 상태(empty)의 WeakHashMap 를 작성합니다. |
|
WeakHashMap (int initialCapacity,
float loadFactor)
지정된 초기 용량과 지정된 부하 계수를 가지는, 새로운 빈 상태(empty)의 WeakHashMap 를 작성합니다. |
|
WeakHashMap (Map <? extends K ,? extends V > m)
지정된 Map 와 같은 매핑을 가지는 신규의 WeakHashMap 를 작성합니다. |
메소드의 개요 | |
---|---|
void |
clear ()
모든 매핑을 맵으로부터 삭제합니다. |
boolean |
containsKey (Object key)
맵이 지정된 키의 매핑을 보관 유지하는 경우에 true 를 돌려줍니다. |
boolean |
containsValue (Object value)
맵이 1 개 또는 복수의 키와 지정된 값을 매핑 하고 있는 경우에 true 를 돌려줍니다. |
Set <Map.Entry <K ,V >> |
entrySet ()
이 맵에 포함되는 맵 Set 뷰를 돌려줍니다. |
V |
get (Object key)
지정된 키가 맵 되고 있는 값을 돌려줍니다. |
boolean |
isEmpty ()
맵이 키와 값의 매핑을 보관 유지하지 않는 경우에 true 를 돌려줍니다. |
Set <K > |
keySet ()
이 맵에 포함되는 키 Set 뷰를 돌려줍니다. |
V |
put (K key,
V value)
지정된 값과 지정된 키를 이 맵에 관련짓습니다. |
void |
putAll (Map <? extends K ,? extends V > m)
지정된 맵으로부터 모든 매핑을 맵에 카피합니다. |
V |
remove (Object key)
키의 매핑이 있는 경우에, 그 매핑을 이 약해시 맵으로부터 삭제합니다. |
int |
size ()
맵내의 키치 매핑의 수를 돌려줍니다. |
Collection <V > |
values ()
이 맵에 포함되는 값 Collection 뷰를 돌려줍니다. |
클래스 java.util. AbstractMap 로부터 상속된 메소드 |
---|
clone , equals , hashCode , toString |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
finalize , getClass , notify , notifyAll , wait , wait , wait |
인터페이스 java.util. Map 로부터 상속된 메소드 |
---|
equals , hashCode |
생성자 의 상세 |
---|
public WeakHashMap(int initialCapacity, float loadFactor)
initialCapacity
- WeakHashMap 의 초기 용량loadFactor
- WeakHashMap 의 부하 계수
IllegalArgumentException
- 초기 용량이 부의 경우, 또는 부하 계수가 정이 아닌 경우public WeakHashMap(int initialCapacity)
initialCapacity
- WeakHashMap 의 초기 용량
IllegalArgumentException
- 초기 용량이 부의 경우public WeakHashMap()
public WeakHashMap(Map <? extends K ,? extends V > m)
m
- 매핑이 이 맵에 배치되는 맵
NullPointerException
- 지정된 맵이 null 의 경우메소드의 상세 |
---|
public int size()
Map <K ,V >
내의 size
AbstractMap <K ,V >
내의 size
public boolean isEmpty()
Map <K ,V >
내의 isEmpty
AbstractMap <K ,V >
내의 isEmpty
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
AbstractMap <K ,V >
내의 get
key
- 관련지을 수 있었던 값이 반환되는 키
null
put(Object, Object)
public boolean containsKey(Object key)
Map <K ,V >
내의 containsKey
AbstractMap <K ,V >
내의 containsKey
key
- 맵에 있을지 어떨지가 판정되는 키
public V put(K key, V value)
Map <K ,V >
내의 put
AbstractMap <K ,V >
내의 put
key
- 지정된 값을 관련지을 수 있는 키value
- 지정된 키에 관련지을 수 있는 값
public void putAll(Map <? extends K ,? extends V > m)
Map <K ,V >
내의 putAll
AbstractMap <K ,V >
내의 putAll
m
- 맵에 포함되는 매핑
NullPointerException
- 지정된 맵이 null 의 경우public V remove(Object key)
k==null ? k==null : key.equals(k))
라고 하는 조건으로, 키 k 로부터 값 v 까지 매핑이 맵에 포함되는 경우, 이 매핑은 삭제됩니다. 맵은 이러한 매핑을 1 개만 포함합니다.
이 맵이 이전에 이 키를 관련짓고 있던 값을 돌려줍니다. 키에 대한 매핑이 맵에 없었던 경우는 null 를 돌려줍니다. 반환값의 null 는, 맵이 키의 매핑을 보관 유지하고 있지 않았던 것을 나타낸다고는인가 선. 즉, 맵이 명시적으로 키를 null 에 맵 한 가능성도 있습니다.
한 번 호출이 돌아가면, 맵은 지정된 키의 매핑을 포함하지 않습니다.
Map <K ,V >
내의 remove
AbstractMap <K ,V >
내의 remove
key
- 매핑이 맵으로부터 삭제되는 키
public void clear()
Map <K ,V >
내의 clear
AbstractMap <K ,V >
내의 clear
public boolean containsValue(Object value)
Map <K ,V >
내의 containsValue
AbstractMap <K ,V >
내의 containsValue
value
- 맵에 있을지 어떨지를 판정되는 값
public Set <K > keySet()
Set
뷰를 돌려줍니다. 세트는 맵과 연동하고 있으므로, 맵에 대한 변경은 세트에 반영되어 또, 세트에 대한 변경은 맵에 반영됩니다. 세트의 반복 처리중으로 맵이 변경되었을 경우, 반복 처리의 결과는 정의되지 않습니다 (반복자 자신의 remove 오퍼레이션을 제외하다). 삭제는,Iterator.remove,Set.remove,removeAll,retainAll, 및 clear 의 각 오퍼레이션을 통해 실시합니다. Set 는,add 오퍼레이션이나 addAll 오퍼레이션은 지원하고 있습니다.
Map <K ,V >
내의 keySet
AbstractMap <K ,V >
내의 keySet
public Collection <V > values()
Collection
뷰를 돌려줍니다. 컬렉션은 맵과 연동하고 있으므로, 맵에 대한 변경은 컬렉션에 반영되어 또 컬렉션에 대한 변경은 맵에 반영됩니다. 컬렉션의 반복 처리중으로 맵이 변경되었을 경우, 반복 처리의 결과는 정의되지 않습니다 (반복자 자신의 remove 오퍼레이션을 제외하다). 컬렉션은 요소의 삭제를 지원하고 있어, 대응하는 매핑을 맵으로부터 삭제할 수 있습니다. 삭제는,Iterator.remove,Collection.remove,removeAll,retainAll, 및 clear 오퍼레이션을 통해 실시합니다. Set 는,add 오퍼레이션이나 addAll 오퍼레이션은 지원하고 있습니다.
Map <K ,V >
내의 values
AbstractMap <K ,V >
내의 values
public Set <Map.Entry <K ,V >> entrySet()
Set
뷰를 돌려줍니다. 세트는 맵과 연동하고 있으므로, 맵에 대한 변경은 세트에 반영되어 또, 세트에 대한 변경은 맵에 반영됩니다. 세트에 대한 반복의 처리중으로 맵이 변경되었을 경우는, 반복 처리의 결과는 정의되지 않습니다 (반복자 자신의 remove 오퍼레이션, 또는 반복자에 의해 반환되는 맵 엔트리에 대한 setValue 오퍼레이션을 제외하다). 세트는, 요소의 삭제를 지원하고 있어, 대응하는 매핑을 맵으로부터 삭제할 수 있습니다. 삭제는,Iterator.remove,Set.remove,removeAll,retainAll, 및 clear 의 각 오퍼레이션을 통해 실시합니다. Set 는,add 오퍼레이션이나 addAll 오퍼레이션은 지원하고 있습니다.
Map <K ,V >
내의 entrySet
AbstractMap <K ,V >
내의 entrySet
|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요 : 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.