loading

프로그래밍/JAVA

[JAVA] HashTable의 개념 및 사용법 정리

침착곰 2021. 5. 25. 23:49
반응형

안녕하세요

이번 포스팅에서는 HashTable에 대해서 알아보겠습니다

 

목차

HashTable이란?
HashTable 선언하기
HashTable 값 추가하기
HashTable 값 삭제하기
HashTable 크기 구하기
HashTable 값 출력하기

 


HashTable이란?

HashMap과 구조가 비슷하지만 용도는 다릅니다

HashTable은 키와 값을 1:1형태로 가져가며 HashTable에 저장이 됩니다

 -> 키는 값을 식별하기 위한 고유한 키, 값은 키가 가진 값을 의미합니다

HashMap과 반대로 동기화가 이루어집니다

HashMap에서는 값으로 null이 입력이 가능하지만 HashTable에서는 null 입력이 불가능합니다

위와 같이 키, 값 형태를 가진다고 보면됩니다

키는 중복이 안 되지만 값은 중복을 허용합니다

 


HashTable 선언하기

import java.util.Hashtable;

public class HashTableDemo {
	public static void main(String[] args)  {
		Hashtable ht = new Hashtable(); // 타입 설정x Object 설정
		Hashtable<Integer, Integer> i = new Hashtable<Integer, Integer>(); // Integer, Integer 타입 선언
		Hashtable<Integer, Integer> i2 = new Hashtable<>(); // new는 타입 생략 가능
		Hashtable<Integer, Integer> i3 = new Hashtable<Integer, Integer>(i); // i의 Hashtable을 i3으로 값 이전
		Hashtable<Integer, Integer> i4 = new Hashtable<Integer, Integer>(10); // 초기용량 지정
		Hashtable<Integer, Integer> i5 = new Hashtable<Integer, Integer>() {{ // 변수 선언 + 초기값 지정
			put(1, 100);
			put(2, 200);
		}};
		
		Hashtable<String, String> str = new Hashtable<String, String>(); // String, String 타입 선언
		Hashtable<Character, Character> ch = new Hashtable<Character, Character>(); // Char, Char 타입 선언
	}
}

HashTable을 선언하는 방법은 여러가지가 있습니다

HashTable은 하나의 Entry에 Key, Value 2개를 가지고 있습니다

타입을 선언하려면 두 개를 동시에 선언해줘야합니다

Hashtable<타입, 타입> 변수명 = new Hashtable<타입, 타입>(); 으로 선언을 해줍니다

나머지 HashTable의 선언 방법들은 위의 예제와 주석을 참고바랍니다

 


HashTable 값 추가하기

import java.util.Hashtable;

public class HashTableDemo {
	public static void main(String[] args)  {
		Hashtable<String, String> ht = new Hashtable<String, String>(); // Hashtable 선언
		
		// 값 추가
		ht.put("1", "Hello1");
		ht.put("2", "World2");
		ht.put("3", "Hello3");
		ht.put("4", "World4");
		ht.put("2", "WorldWorld2");
		
		System.out.println(ht); // 결과출력
	}
}

HashTable의 값을 추가하는 방법은 put(Key, Value) 메서드를 사용하여 값을 추가합니다

put() 메서드를 사용하여 Key가 같고 Value가 다른 값을 중복해서 넣으면 나중에 넣은 Value값으로 변경됩니다

 

결과

 


HashTable 값 삭제하기

import java.util.Hashtable;

public class HashTableDemo {
	public static void main(String[] args)  {
		Hashtable<String, String> ht = new Hashtable<String, String>(); // Hashtable 선언
		
		// 값 추가
		ht.put("1", "Hello1");
		ht.put("2", "World2");
		ht.put("3", "Hello3");
		ht.put("4", "World4");
		
		System.out.println(ht); // 결과출력
		
		ht.remove("2");
		System.out.println(ht); // 결과출력

		ht.clear();
		System.out.println(ht); // 결과출력
	}
}

HashTable의 값을 삭제하는 방법은 여러가지가 있습니다

그 중에서 remove(Key값) 메서드는 Key값에 해당하는 값을 하나 삭제해줍니다

clear() 메서드는 HashTable의 모든 값을 삭제할 때 사용합니다

 

결과

 


 

HashTable 크기 구하기

import java.util.Hashtable;

public class HashTableDemo {
	public static void main(String[] args)  {
		Hashtable<String, String> ht = new Hashtable<String, String>(); // Hashtable 선언
		
		// 값 추가
		ht.put("1", "Hello1");
		ht.put("2", "World2");
		ht.put("3", "Hello3");
		ht.put("4", "World4");
		
		System.out.println(ht); // 결과출력
		System.out.println("Size : " + ht.size());
	}
}

HashTable의 크기를 구하는 방법은 size() 메서드를 사용합니다

HashTable안의 키의 갯수를 출력해줍니다

 

결과

 


HashTable 값 출력하기

HashTable의 값을 출력하는 방법은 여러가지가 있습니다

그 중에서 두 가지 방법을 설명하겠습니다

향상된for문과 Iterator클래스를 사용한 방법입니다

첫 번째 향상된for문을 사용한 방법입니다

import java.util.Hashtable;
import java.util.Map;

public class HashTableDemo {
	public static void main(String[] args)  {
		Hashtable<String, String> ht = new Hashtable<String, String>(); // Hashtable 선언
		
		// 값 추가
		ht.put("1", "Hello1");
		ht.put("2", "World2");
		ht.put("3", "Hello3");
		ht.put("4", "World4");
		
		/* 향상된for문을 사용하여 HashTable의 값을 출력 */
		for(Map.Entry<String, String> e : ht.entrySet())
			System.out.println("Key : " + e.getKey() + ", Value : " + e.getValue());
	}
}

향상된for문과 Map클래스를 사용하여 구현을 합니다

entrySet을 사용하여 HashTable을 Map클래스의 Entry타입으로 변경을 해줍니다

Entry의 메서드 getKey()와 getValue()를 사용하여 Key값과 Value값을 가져와 반복해서 출력합니다

 

결과

 

두 번째는 Iterator방식을 사용한 방법입니다

 

import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

public class HashTableDemo {
	public static void main(String[] args)  {
		Hashtable<String, String> ht = new Hashtable<String, String>(); // Hashtable 선언
		
		// 값 추가
		ht.put("1", "Hello1");
		ht.put("2", "World2");
		ht.put("3", "Hello3");
		ht.put("4", "World4");
		
		Iterator<Entry<String, String>> iter = ht.entrySet().iterator();
		while(iter.hasNext())
		{
			Map.Entry<String, String> entry = iter.next();
			System.out.println("Key : " + entry.getKey() + ", Value : " + entry.getValue());
		}
		System.out.println("-----------------------------");

		Iterator<String> iter2 = ht.keySet().iterator();
		while(iter2.hasNext())
		{
			String key = iter2.next();
			System.out.println("Key : " + key + ", Value : " + ht.get(key));
		}
	}
}

Iterator를 Entry로 선언하여 위의 향상된 for문처럼 entrySet()의 iterator() 방식으로 가져옵니다

예제의 두 번째 방법은 Iterator를 String타입으로 선언하여 HashTable의 키 값을 iterator형태로 집어넣습니다

String을 반복하여 String의 Key값에 해당하는 Value를 반복해서 출력합니다

 

결과

 

여기까지 HashTable의 개념과 사용방법에 대해서 알아봤습니다

추가로 HashTable의 메서드 및 개념에 대해서 더 알아보고 싶은 분들은 아래의 사이트를 참고바랍니다!

https://www.geeksforgeeks.org/hashtable-in-java/

 

Hashtable in Java - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org

 

반응형
그리드형