what is java hashtable hashtable implementation example
이 자습서에서는 Java HashTable, 생성자 및 Hashtable 클래스, 구현 및 Hashtable 대 Hashmap의 메서드에 대해 설명합니다.
HashTable이란 무엇입니까?
Java의 Hashtable은 목록 인 요소의 배열입니다. 이러한 각 목록은 버킷 .
키를 값에 매핑합니다. Java에서 해시 테이블은 'HashTable'클래스로 구현됩니다. 이 클래스는지도 인터페이스를 구현하고 사전 클래스를 상속합니다.
=> 여기에서 완벽한 Java 교육 가이드를 확인하십시오.
Java에서 Hashtable의 몇 가지 고유 한 특성은 다음과 같습니다.
- 목록 또는 버킷을 요소로 포함하는 배열입니다.
- 독특한 요소가 있습니다.
- Hashtable에 널 키 또는 널 값이 없습니다.
- Hashmap과 유사하지만 동기화됩니다.
학습 내용 :
자바의 HashTable 클래스
Java에서이 클래스는 java.util 패키지의 멤버입니다. 따라서 HashTable 클래스 기능을 포함하려면 프로그램에 다음 명령문 중 하나를 포함해야합니다.
import java.util. *;
또는
import java.util.HashTable;
java.util.HashTable 클래스에 대한 일반 클래스 선언은 다음과 같습니다.
public class Hashtable extends Dictionary implements Map, Cloneable, Serializable
여기,
- K => HashTable의 키 유형
- V => 매핑 된 값 유형
HashTable 클래스 API는 클래스 객체를 구성하는 데 사용되는 생성자와 HashTable 클래스의 원활한 기능을 제공하는 클래스의 일부인 다양한 작업 또는 메서드로 구성됩니다.
HashTable 클래스의 생성자
생성자 프로토 타입 | 기술 | |
---|---|---|
세트 | 세트 | 지도에 포함 된 매핑의 집합보기를 반환합니다. |
해시 테이블 () | 기본 생성자 : 초기 기본 용량 및 부하 계수를 사용하여 HashTable 클래스 개체를 만듭니다. | |
해시 테이블 (int 용량) | 지정된 초기 용량으로 해시 테이블을 생성합니다. | |
해시 테이블 (int capacity, float loadFactor) | 초기 용량 = capacity 및 부하 계수 = loadFactor를 사용하여 해시 테이블 개체를 만듭니다. | |
해시 테이블 (맵 t) | 인수로 지정된 지정된 맵에서 새 해시 테이블을 만듭니다. |
HashTable 클래스의 메서드
방법 | 방법 프로토 타입 | 기술 |
---|---|---|
맑은 | 무효 클리어 () | 값을 재설정하여 HashTable을 지 웁니다. |
복제하다 | 개체 복제 () | HashTable 개체의 단순 복사본을 만들고 반환합니다. |
계산하다 | V 컴퓨팅 (K 키, BiFunction remappingFunction) | remapping 함수를 사용하여 주어진 키와 값 사이의 매핑을 계산합니다. |
computeIfAbsent | V computeIfAbsent (K 키, 함수 매핑 기능) | 지정된 키가 지정된 값과 아직 연결되지 않은 경우 다시 매핑 함수를 사용하여 지정된 키와 값 간의 매핑을 계산합니다. |
computeIfPresent | V computeIfPresent (K 키, BiFunction remappingFunction) | 주어진 키가있는 경우 리매핑 함수는 주어진 키와 값 사이의 새 매핑을 계산하는 데 사용됩니다. |
집단 | 열거 요소 () | 해시 테이블의 값 열거를 반환합니다. |
같음 | 부울 같음 (Object o) | 주어진 개체를 HashTable과 비교합니다. |
각각 | void forEach (BiConsumer 작업) | 모든 요소가 소진 될 때까지 각 HashTable 요소에 대해 지정된 조치가 수행됩니다. |
getOrDefault | V getOrDefault (객체 키, V defaultValue) | 지정된 키가 매핑 된 값을 반환하거나 맵에 키에 대한 매핑이없는 경우 defaultValue를 반환합니다. |
해시 코드 | int hashCode () | HashTable의 해시 코드를 반환합니다. |
열쇠 | 열거 키 () | HashTable의 키를 열거 형으로 반환합니다. |
keySet | keySet 설정 () | HashTable에 대한 키 세트 (키를 세트로)를 리턴합니다. |
가다 | V 병합 (K 키, V 값, BiFunction 재 매핑 기능) | 키가 아직 없거나 null 인 경우 다시 매핑 기능을 사용하여 지정된 키를 null이 아닌 값으로 매핑합니다. |
놓다 | V put (K 키, V 값) | HashTable에 새 키-값 쌍을 삽입합니다. |
putAll | 무효 putAll (맵 t)) | 주어진 맵의 키-값 쌍을 HashTable에 넣거나 복사합니다. |
putIfAbsent | V putIfAbsent (K 키, V 값) | 키가 아직 없거나 null과 연결되어 있지 않은 경우 지정된 키를 null 값과 연결합니다. |
없애다 | 부울 제거 (개체 키, 개체 값) | HashTable에서 주어진 키-값 쌍을 삭제합니다. |
바꾸다 | V 교체 (K 키, V 값) | 주어진 키의 값을 지정된 값으로 대체합니다. |
바꾸다 | 부울 바꾸기 (K 키, V oldValue, V newValue) | 주어진 키의 이전 값을 새 값으로 바꿉니다. |
전부 교체 | void replaceAll (BiFunction 함수) | HashTable의 모든 항목은 주어진 함수를 평가하여 얻은 값으로 대체됩니다. |
toString | 문자열 toString () | HashTable 개체를 문자열 표현으로 변환합니다. |
가치 | 컬렉션 값 () | HashTable의 값을 컬렉션으로 반환합니다. |
포함 | 부울 포함 (객체 값) | 주어진 값이 HashTable에 있는지 확인합니다. 존재하면 true를 반환하고 그렇지 않으면 false를 반환합니다. |
값을 포함 | 부울 containsValue (객체 값) | HashTable에 주어진 값과 같은 값이 있는지 확인하고 true를 반환합니다. |
containsKey | 부울 containsKey (객체 키) | HashTable에 주어진 키와 동일한 키가 있는지 확인하고 예인 경우 true를 반환합니다. |
비었다 | 부울 isEmpty () | 주어진 HashTable이 비어 있는지 확인하고 예인 경우 true를 반환합니다. |
다시 만들다 | 보호 된 무효 재해시 () | 해시 테이블의 크기를 늘리고 모든 키를 다시 해시하는 데 사용됩니다. |
가져 오기 | V get (객체 키) | 주어진 키의 값을 검색합니다. |
없애다 | V 제거 (객체 키) | 주어진 키와 값을 삭제하고이 값을 반환합니다. |
크기 | int 크기 () | HashTable에있는 요소의 크기 또는 수를 반환합니다. |
HashTable 구현
다음은 Java로 클래스를 구현 한 것입니다. 여기서 우리는 클래스에서 제공하는 모든 중요한 메서드를 시연했습니다.
나머지 API 인터뷰 질문 및 답변
import java.util.*; class Main{ public static void main(String args()){ //create a Hashtable and initiliaze it Hashtable hash_tab=new Hashtable (); hash_tab.put(100,'Red'); hash_tab.put(101,'Green'); hash_tab.put(104,'Blue'); hash_tab.put(102,'Orange'); hash_tab.put(103,'Brown'); //obtain entrySet for the Hashtable and print the elments System.out.println('The contents of Hashtable:'); for(Map.Entry m:hash_tab.entrySet()){ System.out.println(m.getKey()+' : '+m.getValue()); } //getOrDefault operation => get the value at given key or output default message System.out.println('Hashtable Value at 101: ' + hash_tab.getOrDefault(101, 'Value Not Found')); System.out.println('Hashtable Value at 105: ' +hash_tab.getOrDefault(105, 'Value Not Found')); //remove operation => delete value at given key hash_tab.remove(102); System.out.println('After remove(102), the Hash Table: '+ hash_tab); //putIfAbsent operation=>update the key-value pair in table if absent hash_tab.putIfAbsent(102,'Orange'); System.out.println('Updated Hash Table: '+hash_tab); } }
산출:
Hashtable의 내용 :
104 : 블루
103 : 브라운
102 : 오렌지
101 : 녹색
100 : 네트워크
101의 해시 테이블 값 : 녹색
105의 해시 테이블 값 : 값을 찾을 수 없음
remove (102) 후 해시 테이블 : {104 = Blue, 103 = Brown, 101 = Green, 100 = Red}
업데이트 된 해시 테이블 : {104 = 파란색, 103 = 갈색, 102 = 주황색, 101 = 녹색, 100 = 빨간색}
HashTable Java 예제
이 프로그램에서는 각각의 계정 잔액을 값으로 사용하여 계정 소유자 이름으로 키가있는 해시 테이블을 정의합니다. 먼저 HashTable에서 열거 형으로 키를 검색합니다. 그런 다음이 열거를 사용하여 HashTable에서 키-값 쌍을 인쇄합니다.
나중에 보유자 중 한 명의 계정 잔액을 업데이트하고 업데이트 된 금액을 인쇄합니다.
아래에 주어진 프로그램은이 구현을 보여줍니다.
import java.util.*; public class Main { public static void main(String args()) { // Create a Hashtable of account balance Hashtable acc_balance = new Hashtable(); Enumeration person_names; String name_str; double balance; //initialize the Hashtable acc_balance.put('Lily', new Double(4367.34)); acc_balance.put('Ben', new Double(95.43)); acc_balance.put('Lacy', new Double(1200.00)); acc_balance.put('Dillon', new Double(499.22)); acc_balance.put('James', new Double(78.48)); // retrieve the keys of the Hashtable person_names = acc_balance.keys(); System.out.println('The account balance Hashtable:'); System.out.println(' KEY VALUE '); //print the contents of Hashtable while(person_names.hasMoreElements()) { name_str = (String) person_names.nextElement(); System.out.println(' ' + name_str + ' ' + acc_balance.get(name_str)); } System.out.println(); // Update Ben's Account by adding 1000 to it. balance = ((Double)acc_balance.get('Ben')).doubleValue(); acc_balance.put('Ben', new Double(balance + 1000)); //print the contents of updated account System.out.println('Ben's new Account balance: ' + acc_balance.get('Ben')); } }
산출:
계정 잔액 Hashtable :
핵심 가치
제임스 78.48
벤 95.43
딜론 499.22
릴리 4367.34
레이스 1200.0
Ben의 새 계정 잔액 : 1095.43
해시 테이블 대 해시 맵
HashTable | HashMap |
---|---|
HashTable은 실행 속도가 느립니다. | HashMap이 더 빠릅니다. |
사전 클래스를 상속합니다. | AbstractMap 클래스를 상속합니다. |
레거시 클래스입니다. | JDK 1.2에 도입 된 HashMap 클래스 |
동기화되고 스레드로부터 안전합니다. | 동기화되지 않고 스레드로부터 안전하지 않습니다. |
내부적으로 동기화되며 취소 할 수 없습니다. | Collections.synchronizedMap 메서드를 사용하여 동기화 할 수 있습니다. |
null 키 / 값이 허용되지 않습니다. | null 키 및 여러 null 값을 허용합니다. |
Enumerator 및 Iterator를 사용하여 순회 할 수 있습니다. | Iterator를 사용해서 만 순회 할 수 있습니다. |
자주 묻는 질문
Q # 1) Java에서 Hashtable이란 무엇입니까?
대답: 'dictionary'클래스를 상속하고 키-값 쌍을 저장하는 레거시 클래스입니다.
질문 # 2) Hashtable이 사용되는 이유는 무엇입니까?
대답: 키-값 쌍을 저장하는 데 사용됩니다. 따라서 키-값 쌍을 테이블 형식으로 저장해야 할 때 HashTable로 이동합니다. 둘째, 버킷을 사용하여 동일한 키에 대해 여러 값을 저장할 수 있습니다. 데이터 검색은 HashTables에서 효율적입니다.
질문 # 3)Java로 Hashtable을 어떻게 생성합니까?
대답: java.util.HashTable 클래스의 객체를 인스턴스화하여 만들 수 있습니다.
HashTable hashTable = new HashTable();
위의 문은 문자열 유형의 키와 값을 사용하여‘hashTable’이라는 HashTable을 만듭니다.
질문 # 4) Hashtable은 스레드로부터 안전합니까?
MP4 변환기 온라인 최고의 YouTube
대답: 예, 스레드로부터 안전합니다. 스레드 안전성이 필요하지 않은 경우 HashMap을 선택할 수 있습니다.
질문 # 5) 예제를 통해 Java에서 Hashtable이 내부적으로 어떻게 작동합니까?
대답: 내부적으로는 버킷이라는 구조에 키-값 쌍을 저장합니다. 버킷의 위치는 키의 hashCode에 의해 결정됩니다. 해시 함수는 키의 hashCode를 사용하여 버킷 위치를 가져옵니다.
결론
HashTable은 키-값 쌍의 형식으로 저장된 데이터로 구성됩니다. 키 또는 값은 null 일 수 없습니다. Java에서는 HashTable 클래스를 사용하여 구현됩니다.
Java 언어로 HashTable 구현과 함께 HashTable 클래스에서 제공하는 생성자와 메서드를 살펴 보았습니다.
다음 튜토리얼에서는 HashMap 컬렉션에 대해 설명합니다.
=> 독점적 인 Java 교육 자습서 시리즈를 보려면 여기를 방문하십시오.