java에서 Hashtable과 HashMap의 차이점 분석
public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, java.io.Serializable
HashMap:
public class HashMap<K,V>
extends AbstractMap<K,V>
implements Map<K,V>, Cloneable, Serializable
HashMap과 Hashtable은 모두 맵 인터페이스의 실현 클래스이다.2. Hashtable의 방법은 동기화()이고 HashMap의 방법은 기본적으로 동기화되지 않습니다.즉, 다중 루틴 응용 프로그램에서 전문적인 조작 없이hashtable를 안전하게 사용할 수 있다는 것이다.HashMap의 경우 추가 동기화 메커니즘이 필요합니다.그러나 HashMap의 동기화 문제는 Collections의 정적 방법으로 해결될 수 있습니다
public static <K,V> Map<K,V> synchronizedMap(Map<K,V> m)
이 방법은 동기화된 맵을 되돌려줍니다. 즉, 되돌아오는 맵은 안전하다는 것입니다.주의해야 할 것은 되돌아오는 맵을 교체할 때 반드시 수동으로 되돌아오는 맵에 동기화해야 한다는 것이다. 그렇지 않으면 불확실한 행동을 초래할 수 있다
Map m = Collections.synchronizedMap(new HashMap());
...
Set s = m.keySet(); // Needn't be in synchronized block
...
synchronized(m) { // Synchronizing on m, not s!
Iterator i = s.iterator(); // Must be in synchronized block
while (i.hasNext())
foo(i.next());
}
3.HashMap에서null은 키로 사용할 수 있는데 이런 키는 하나밖에 없다.하나 이상의 키가 대응하는 값은null입니다.get () 방법이null 값을 되돌릴 때, HashMap에 이 키가 없다는 것을 나타낼 수도 있고, 이 키에 대응하는 값이null이라는 것을 나타낼 수도 있습니다.따라서 HashMap에서 get() 방법으로 HashMap에 키가 있는지 판단할 수 없으며,containsKey() 방법으로 판단해야 한다.Hashtable의 키 값은null일 수 없습니다. 그렇지 않으면:java.lang.NullPointerException .4. HashTable은 Enumeration, HashMap은 Iterator를 사용합니다.이상은 표면적인 차이일 뿐 그들의 실현도 크게 다르다.5.HashTable에서hash수조의 기본 크기는 11이며, 추가 방식은old*2+1입니다.HashMap에서 Hash수 그룹의 기본 크기는 16이고 반드시 2의 지수입니다.6. 해시 값의 사용에 따라 해시테이블은 대상의 해시코드를 직접 사용하는데 코드는 다음과 같다
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
그리고 HashMap은hash값을 다시 계산하고 구모를 대체합니다. 예를 들어 HashMap의put방법:
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
static int indexFor(int h, int length) {
return h & (length-1);
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
java에서 Hashtable과 HashMap의 차이점 분석1. Hashtable은 Dictionary의 하위 클래스입니다 HashMap: HashMap과 Hashtable은 모두 맵 인터페이스의 실현 클래스이다. 2. Hashtable의 방법은 동기화()이고 HashMap...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.