|
JavaTM Platform Standard Ed. 6 |
|||||||||
앞의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
개요 : 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 |
java.lang.Objectjava.util.AbstractMap <K, V>
java.util.HashMap<K, V>
K
- 이 맵으로 보관 유지되는 키의 형태V
- 맵 되는 값의 형태public class HashMap<K, V>
Map 인터페이스의 해시 테이블에 근거하는 구현입니다. 이 구현은, 맵에 관련하는 옵션의 오퍼레이션을 모두 지원해,null 치 및 null 키를 사용할 수 있습니다. HashMap 클래스는 Hashtable 와 같은 것으로 간주해도 괜찮습니다가,HashMap 는 동기가 취해지지 않고, null 의 경우도 있습니다. 이 클래스는 맵의 순서를 보증하지 않습니다. 특히, 그 순서를 항상 일정에 유지하는 것을 보증하지 않습니다.
이 구현은, 해쉬 함수가 복수의 버킷으로 요소를 적절히 분산시키는 것을 상정해, 기본 오퍼레이션 (get 및 put)으로 일정시간의 성능을 제공합니다. 코레크션뷰의 반복 처리에서는,HashMap 의 인스턴스의 「용량」(버킷수)과 그 사이즈 (키와 값의 매핑의 수)의 합계 에 비례한 시간이 필요합니다. 따라서, 반복 처리의 성능이 중요한 경우는, 초기 용량을 너무 높게 (부하 계수를 너무 낮게) 설정하지 않는 것이 매우 중요합니다.
HashMap 의 인스턴스에는, 그 성능에 영향을 주는 2 개의 파라미터 「초기 용량」 및 「부하 계수」가 있습니다. 「용량」은 해시 테이블의 버킷수이며, 초기 용량은 단순하게 해시 테이블이 작성된 시점에서의 용량입니다. 「부하 계수」는, 해시 테이블의 용량이 자동적으로 증가하기 전에 해시 테이블이 어느 정도 가득 될까의 기준입니다. 해시 테이블 엔트리수가 부하 계수와 현재의 용량의 적을 넘으면(자), 해시 테이블의 해시가 다시 해지고 (즉, 내부 데이터 구조가 재구축 되고), 해시 테이블의 버킷수는 약 2 배가 됩니다.
대부분의 경우, 디폴트의 부하 계수 (. 75)에서는, 시간 코스트와 스페이스 코스트의 균형을 취합니다. 이 값을 크게 하면(자), 스페이스의 오버헤드가 감소합니다만, 참조 코스트가 증가해,get 및 put 를 포함한 HashMap 클래스의 대부분의 오퍼레이션이 영향을 받습니다. 초기 용량을 설정할 때는, rehash 오퍼레이션의 회수를 최소한으로 억제하기 위해서(때문에), 맵의 엔트리 예정수 및 부하 계수를 고려할 필요가 있습니다. 초기 용량이, 엔트리의 최대수를 부하 계수로 나눈 값보다 큰 경우, rehash 오퍼레이션은 일어나지 않습니다.
HashMap 의 인스턴스에 많은 매핑이 포함되는 경우는, 이 테이블의 작성시에 충분한 크기의 용량을 설정하면(자), 필요에 따라서 해시를 자동적으로 다시 해 테이블을 크게 하는 것보다도, 매핑을 보다 효율적으로 포함할 수 있습니다.
이 구현은 동기화 되지 않습니다. 복수의 thread가 동시에 해시 맵에 액세스 해, 그러한 thread의 적어도 1 개(살)이 구조적으로 맵을 변경하는 경우에는, 외부에서 동기를 잡을 필요가 있습니다. 구조적인 변경이란, 1 개(살) 이상의 매핑을 추가 또는 삭제하는 오퍼레이션입니다. 벌써 인스턴스에 포함되고 있는 키에 관련지을 수 있었던 값을 변경하는 것은 구조적인 변경이 아닙니다. 일반적으로, 구조적인 변경은, 맵을 자연스럽게 캡슐화하는 특정의 객체로 동기를 잡는 것에 의해 달성됩니다.
이런 종류의 객체가 없는 경우에는,Collections.synchronizedMap
메소드를 사용해 맵을 「랩」할 필요가 있습니다. 맵에의 우발적인 비동기 액세스를 막기 위해서(때문에), 작성시에 실시하는 것이 최적입니다.
Map m = Collections.synchronizedMap(new HashMap(...));
이 클래스의 「코레크션뷰메소드」에 의해 반환되는 반복자는 「fail-fast」입니다. 반복자의 작성 후에, 반복자 자체의 remove 메소드 이외 방법으로 맵이 구조적으로 변경되면(자), 반복자는 ConcurrentModificationException
를 throw 합니다. 이와 같이, 병행해 변경을 하면(자), 반복자는, 장래의 예측할 수 없는 시점에 있어 예측할 수 없는 동작이 발생하는 위험을 회피하기 위해서, 즉시 한편 솜씨 자주(잘) 예외를 throw 합니다.
일반적으로, 비동기의 병행 변경이 있는 경우, 확실한 보증을 실시하는 것은 불가능해서, 반복자의 fail-fast의 동작을 보증할 수 없습니다. fail-fast 반복자는 최선 노력 원칙에 근거해,ConcurrentModificationException 를 throw 합니다. 따라서, 정확을 기하기 위해서 이 예외에 의존하는 프로그램을 쓰는 것은 잘못입니다. 「반복자의 fail-fast의 동작은 버그를 검출하기 위해서 사용해야 합니다」
이 클래스는,Java Collections Framework 의 멤버입니다.
Object.hashCode()
,
Collection
,
Map
,
TreeMap
,
Hashtable
,
직렬화 된 형식 상자의 클래스의 개요 |
---|
클래스 java.util. AbstractMap 로부터 상속된 상자의 클래스/인터페이스 |
---|
AbstractMap.SimpleEntry <K ,V >, AbstractMap.SimpleImmutableEntry <K ,V > |
생성자 의 개요 | |
---|---|
HashMap ()
디폴트의 초기 용량 (16)과 디폴트의 부하 계수 (0.75)로 빈 상태(empty)의 HashMap 를 작성합니다. |
|
HashMap (int initialCapacity)
지정된 초기 용량과 디폴트의 부하 계수 (0.75)로 빈 상태(empty)의 HashMap 를 작성합니다. |
|
HashMap (int initialCapacity,
float loadFactor)
지정된 초기 용량과 부하 계수로 빈 상태(empty)의 HashMap 를 작성합니다. |
|
HashMap (Map <? extends K ,? extends V > m)
지정된 Map 와 같은 매핑으로 신규 HashMap 를 작성합니다. |
메소드의 개요 | |
---|---|
void |
clear ()
모든 매핑을 맵으로부터 삭제합니다. |
Object |
clone ()
HashMap 의 인스턴스의 shallow 복사를 돌려줍니다. |
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 로부터 상속된 메소드 |
---|
equals , hashCode , toString |
클래스 java.lang. Object 로부터 상속된 메소드 |
---|
finalize , getClass , notify , notifyAll , wait , wait , wait |
인터페이스 java.util. Map 로부터 상속된 메소드 |
---|
equals , hashCode |
생성자 의 상세 |
---|
public HashMap(int initialCapacity, float loadFactor)
initialCapacity
- 초기 용량loadFactor
- 부하 계수
IllegalArgumentException
- 초기 용량이 부인지, 부하 계수가 정이 아닌 경우public HashMap(int initialCapacity)
initialCapacity
- 초기 용량
IllegalArgumentException
- 초기 용량이 부의 경우public HashMap()
public HashMap(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)
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 Object clone()
AbstractMap <K ,V >
내의 clone
Cloneable
public Set <K > keySet()
Set
뷰를 돌려줍니다. 세트는 맵과 연동하고 있으므로, 맵에 대한 변경은 세트에 반영되어 또, 세트에 대한 변경은 맵에 반영됩니다. 세트의 반복 처리중으로 맵이 변경되었을 경우, 반복 처리의 결과는 정의되지 않습니다 (반복자 자신의 remove 오퍼레이션을 제외하다). 세트는 요소의 삭제를 지원하고 있어, 대응하는 매핑을 맵으로부터 삭제할 수 있습니다. 삭제는,Iterator.remove,Set.remove,removeAll,retainAll, 및 retainAll 오퍼레이션을 통해 실시합니다. 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 도 참조해 주세요.