Java에서 HashMap과 HashTable의 차이점
게시 됨: 2021-06-02Java 및 해당 응용 프로그램에 대해 배우고 있다면 HashMap 및 HashTable을 접했을 것입니다. 둘 다 Java Collection 프레임워크에서 가장 중요한 클래스 중 하나입니다. Java로 개발하는 동안 광범위하게 사용할 것이므로 차이점을 이해하는 것이 중요합니다.
다음 요점에서 HashTable 대 HashMap 주제를 자세히 다루고 둘 사이의 차이점을 설명합니다.
목차
해시맵이란?
HashMap은 Java 1.2 도입 이후 Java 컬렉션에 포함되었습니다. Java의 Map 인터페이스의 기본 구현을 수행할 수 있습니다. HashMap은 (Key, Value) 쌍으로 데이터를 저장하며, 이에 액세스하려면 정수와 같은 다른 유형의 인덱스를 사용해야 합니다.
여기서 하나의 객체를 다른 객체(값)에 대한 키(인덱스)로 사용하므로 (키, 값) 쌍을 사용합니다. 중복 키를 추가하면 해당 키의 요소가 대체됩니다.
해시맵의 특징
HashTable과 HashMap의 차이점을 이해하려면 먼저 기능을 이해해야 합니다. 그것은 당신이 그들 모두의 기본 사항에 익숙해 질 것입니다. HashMap에는 다음과 같은 기능이 있습니다.
- java.util 패키지의 일부입니다.
- Map 인터페이스의 불완전한 구현을 제공하는 추상 클래스 AbstractMap을 확장합니다.
- Map 인터페이스 구현과 함께 Serializable 및 Cloneable 인터페이스도 구현합니다.
- 중복 값을 허용하지만 중복 키를 허용하지 않습니다. 즉, 하나의 키는 둘 이상의 값을 가질 수 없지만 여러 키는 단일 값을 가질 수 있습니다.
- HashMap에서 null 키는 한 번만 사용할 수 있지만 여러 null 값을 사용할 수 있습니다.
- 지도의 순서, 특히 시간이 지남에 따라 순서가 일정하게 유지되는지 여부를 보장하지 않습니다. HashMap은 HashTable과 거의 유사하지만 동기화되지 않습니다.
- HashSet은 내부적으로 HashMap을 사용합니다.
해시테이블이란?
HashTable 클래스를 사용하여 키를 값에 매핑하는 해시 테이블을 구현합니다. 여기서 null이 아닌 개체를 키 또는 값으로 사용할 수 있습니다. 해시 테이블에서 객체를 성공적으로 저장하고 검색하려면 키로 사용한 객체가 hashCode 메서드와 equals 메서드를 구현해야 합니다.
해시 테이블은 데이터를 배열 형식으로 저장하며 모든 데이터 값에는 고유한 인덱스 값이 있습니다. 이렇게 하면 필요한 인덱스를 알고 있는 경우 특정 데이터에 매우 빠르게 액세스할 수 있습니다.
해시테이블의 특징
HashTable은 HashMap과 같은 독특한 기능을 가지고 있습니다. 그러나 이러한 기능으로 인해 HashMap과 여러 면에서 독특하고 다릅니다.
- HashTable은 HashMap과 매우 유사하지만 동기화됩니다.
- 해시 테이블에 키-값 쌍을 저장합니다.
- 여기에서 키로 사용되는 개체와 연결하려는 값을 지정합니다. 그런 다음 키를 해시하고 생성된 해시 코드를 테이블 내에서 값을 저장하는 인덱스로 사용합니다.
- Hashtable 클래스의 기본 용량은 11이고 부하율은 0.75입니다.
- HashMap은 열거를 제공하지 않는 반면 Hashtable은 빠른 열거를 제공하지 않습니다.
HashMap과 HashTable의 차이점
이제 HashMap 및 HashTable의 특정 하이라이트를 알았으므로 이제 이들을 비교하고 둘 사이의 두드러진 차이점을 살펴보겠습니다.
해시맵 | 해시 테이블 |
동기화되지 않습니다. 스레드로부터 안전하지 않기 때문에 적절한 동기화 코드를 사용하지 않고 여기에서 많은 스레드를 공유할 수 없습니다. | 동기화됩니다. 스레드로부터 안전하기 때문에 많은 스레드와 공유할 수 있습니다. |
AbstractMap 클래스를 상속합니다. | Dictionary 클래스를 상속합니다. |
여기서 Iterator는 빠릅니다. | HashTable에서 열거자는 빠른 속도가 아닙니다. |
Iterator는 HashMap을 순회합니다. | 열거자와 반복자는 HashTable을 순회합니다. |
코드를 호출하여 HashMap을 동기화할 수 있습니다. 맵 m = Collections.synchronisedMap(hashMap); | 해시 테이블은 내부적으로 동기화되며 어떤 코드와도 동기화를 해제할 수 없습니다. |
꽤 빠릅니다. | HashMap보다 상대적으로 느립니다. |
HashMap은 새로운 클래스이며 최근 JDK 1.2에 도입되었습니다. | HashTable은 레거시 클래스입니다. |
여러 null 값과 하나의 null 키를 허용합니다. | null 값이나 키를 허용하지 않습니다. |
코딩 예
다음은 HashMap과 HashTable이 작동하는 예이므로 HashMap과 HashTable의 차이점을 이해할 수 있습니다.
입력:
가져오기 java.util.*;
가져오기 java.lang.*;
가져오기 java.io.*;
공개 클래스 JavaTester{
공개 정적 무효 메인(문자열 인수[]){
해시 테이블 ht=새로운 해시 테이블();
ht.put(1,"우데이");
ht.put(1,"쩨왈");
ht.put(2, "수밋");
ht.put(3,"비제이");
System.out.println(“————-해시 테이블—————“);
Set<정수> keySet = ht.keySet();
(정수 키:keySet) {
System.out.println(키 + " "+ht.get(키));
}
HashMap hm=새로운 HashMap();
hm.put(0,"우데이");
hm.put(4,"우데이"); // 해시맵에 중복 값을 가질 수 있습니다.
hm.put(1,"수밋");
hm.put(2,"비제이");
System.out.println(“———–해시 맵———–“);
Set<정수> keySet1 = ht.keySet();
(정수 키:keySet) {
System.out.println(키 + " "+hm.get(키));
}
}
}
산출:
해시 테이블:
3 비자이
2 서밋
1 칡
해시 맵:
0 우다이
1 서밋
2 비자이
4 우다이
HashMap 대 HashTable을 언제 사용합니까?
HashMap 또는 HashTable을 사용할지 여부를 결정하는 주요 요소는 동기화입니다. 스레드로부터 안전한 작업이 필요한 경우 모든 메서드가 동기화되므로 HashTable을 사용해야 합니다. 그러나 이는 레거시 클래스이므로 피해야 합니다.
멀티쓰레드 환경이라면 HashTable과 매우 유사한 ConcurrentHashMap을 사용해야 합니다. 이를 통해 HashMap을 올바르게 동기화할 수 있습니다.
동기화된 작업은 성능을 저하시키므로 대부분의 경우 이러한 작업을 피해야 합니다. 또한 HashMap은 non-threaded 환경에 적합하므로 쉽게 사용할 수 있습니다.
세계 최고의 대학에서 온라인으로 소프트웨어 과정을 배우십시오 . 이그 제 큐 티브 PG 프로그램, 고급 인증 프로그램 또는 석사 프로그램을 획득하여 경력을 빠르게 추적하십시오.
결론
HashMap 및 HashTable은 유사한 기능을 가진 인기 있는 Java 코드입니다. 그러나 보시다시피 둘 사이에는 몇 가지 두드러진 차이점이 있습니다. HashMap은 Java 클래스이고 HashTable은 데이터 구조입니다.
Java 및 기타 프로그래밍 언어에 대해 자세히 알아보려면 전체 스택 개발을 전문으로 하는 소프트웨어 개발의 Executive PG 프로그램을 확인하는 것이 좋습니다 .
해시 테이블이란 무엇입니까?
해시 테이블은 컴퓨터 프로그래밍에서 널리 사용되는 컨테이너 데이터 구조입니다. 해시 테이블은 키-값 쌍을 유지하는 데 사용되며, 여기서 키는 모든 개체가 될 수 있습니다. 컨테이너로서 해시 테이블은 삽입 및 제거 작업을 지원해야 합니다. 조회 도구로서 해시 테이블은 get 작업을 지원해야 합니다. 해시 테이블이 사전 데이터 구조인 경우 포함 작업도 지원해야 합니다. 따라서 일반적으로 해시 테이블은 삽입, 제거, 가져오기 및 포함 작업을 효과적으로 구현하기 위해 널리 사용되는 데이터 구조입니다. 해시 테이블은 빠른 성능 때문에 널리 사용됩니다.
Java에서 컬렉션 프레임워크란 무엇입니까?
Java Collections Framework는 Java 플랫폼용 인터페이스, 클래스 및 알고리즘 세트입니다. 버전 1.2부터 Java 플랫폼의 일부였습니다. 여기에는 컨테이너, 목록, 대기열 등을 위한 인터페이스가 포함되지만 날짜와 시간을 처리하는 클래스, 정규 표현식을 처리하는 클래스, 국제화를 처리하는 클래스, 파일 검색을 처리하는 클래스도 포함됩니다.
Java에서 해시 테이블과 해시 맵 사이의 관계는 무엇입니까?
해시 테이블은 키와 값을 연결하는 특수 데이터 구조입니다. 키는 모든 객체가 될 수 있지만 주어진 해시 테이블의 모든 키는 서로 비교할 수 있어야 합니다(즉, 동일하거나 호환되는 인터페이스를 사용). Java에서 맵은 TreeMap을 사용하여 구현되는 특정 종류의 해시 테이블입니다. 맵의 키는 equals 메소드를 구현해야 하며 맵은 이 메소드를 사용하여 두 개의 키가 같은지 여부를 결정합니다. 즉, 키만 맵에 저장되고 관련 값은 필요할 때마다 계산됩니다.