1. 해시 맵과 해시 가능의 차이
먼저 두 클래스의 정의를 살펴 보겠습니다
공개 클래스 해시 테이블은 사전 도구 맵, 클로닝 가능, java.io.serializable을 확장합니다
공개 클래스 해시 맵은 AbstractMap 구현 맵, 클로닝 가능, 직렬화 가능합니다
Hashtable은 Dictionary 및 Hashmap의 상속을 AbstractMap에서 상속하는 것을 볼 수 있습니다.
hashtable의 PUT 방법은 다음과 같습니다
public synchronized v put (k key, v value) {// ########## 여기서 참고 1 // 값이 null이 아닌지 확인하십시오 (value == null) {// ####### 여기에 참고 2 여기 새 nullpointerexception (); } // 키가 아직 해시 가능에 있는지 확인하십시오. 입력 탭 [] = 테이블; int hash = key.hashcode (); // ######### 여기 3 int index = (Hash & 0x7ffffff) % tab.length; for (Entry E = Tab [index]; e! = null; e = e.next) {if ((e.hash == hash) && e.key.equals (key)) {v old = e.value; e.Value = 값; 옛날 복귀; }} modcount ++; if (count> = threshold) {// 임계 값이 rehash ()를 초과하면 테이블을 다시 해시합니다 (); 탭 = 테이블; index = (해시 & 0x7ffffff) % tab.length; } // 새 항목을 만듭니다. 입력 e = 탭 [index]; 탭 [index] = 새 항목 (해시, 키, 값, e); 카운트 ++; 널 리턴; } 참고 1 메소드는 동기입니다
참고 2 메소드는 value == null을 허용하지 않습니다
참고 3 메소드는 키의 해시 코드 메소드를 호출합니다. key == null이면 널 포인터 예외가 발생합니다. 해시 맵의 PUT 방법은 다음과 같습니다.
public v put (k key, v value) {// ########### 여기 1 if (key == null) // ######### 참고 여기 2 Putfornullkey (value); int hash = hash (key.hashcode ()); int i = indexfor (Hash, table.length); for (Entry E = 테이블 [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 = 값; e.recordaccess (this); OldValue를 반환하십시오. }} modcount ++; Addentry (해시, 키, 값, i); // ######## 여기에 참고 NULL; } 참고 1 메소드는 비동기입니다
참고 2 메소드는 key == null을 허용합니다
참고 3이 메소드는 값을 호출하지 않으므로 NULL이 허용됩니다.
다시 채우다:
Hashtable에는 포함 된 방법이있어 오해가 쉽게 오해를 유발할 수 있으므로 해시 맵에서 제거되었습니다.
물론, 두 클래스 모두 포함 된 키와 포함 Value 메소드를 사용합니다.
| 해시 맵 | 해시 가능 | |
| 부모 수업 | AbstractMap | 사전 |
| 동기화 되었습니까? | 아니요 | 예 |
| k, v null can | 예 | 아니요 |
Hashmap은 Hashtable (비 스레드-안전 구현)의 경량 구현입니다. 그들은 모두 맵 인터페이스를 완성합니다. 주요 차이점은 해시 맵이 널 키를 허용한다는 것입니다. 스레드-안전이 없기 때문에 해시 가능보다 더 효율적일 수 있습니다.
Hashmap은 NULL을 항목의 키 또는 값으로 허용하지만 Hashtable은 그렇지 않습니다.
Hashmap은 해시 테이블이 포함 된 메소드를 제거하고이를 포함하여 포함하여 포함합니다. 포함 된 방법은 오해를 쉽게 일으킬 수 있기 때문입니다.
Hashtable은 사전 클래스에서 상속되며 Hashmap은 Java 1.2에서 도입 한 MAP 인터페이스를 구현 한 것입니다.
가장 큰 차이점은 해시 테이블 방법이 동기화되고 해시 맵은 그렇지 않다는 것입니다. 다중 스레드가 해시 테이블에 액세스하면 메소드 자체에 대해 동기화 할 필요가 없으며 Hashmap은 외부 동기화 (Collections.SynchronizedMap)를 제공해야합니다.
Hashtable 및 Hashmap에서 사용하는 해시/재사용 알고리즘은 거의 동일하므로 성능에 큰 차이가 없습니다.
요약 :
해시 맵의 주요 값은 비어 있고 비동기식입니다.
Hashtable의 핵심 값은 Null이 허용되지 않으며 동기화됩니다.
상속은 다르지만 둘 다 맵 인터페이스를 구현합니다
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.