Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

Everything has an expiration date

170 - Java 컬렉션(Collection) : Map - Hashtable<key, value> 클래스. null 을 허용하지 않으며 key와 value로 데이터를 구분한다. 본문

[Java]/Program source (java)

170 - Java 컬렉션(Collection) : Map - Hashtable<key, value> 클래스. null 을 허용하지 않으며 key와 value로 데이터를 구분한다.

Jelly-fish 2023. 9. 25. 10:49

 

/* ====================================
  ■■■ 컬렉션 (Collection) ■■■
======================================*/

// Map → Hashtable, HashMap

/*
(이름표가 달려있다. key와 value로 데이터를 저장한다.)

○ java.util.Map 인터페이스
   키(key)를 값(value)에 매핑(mapping)하며
   동일한 키를 등록할 수 없고, 유일해야 하며,
   각 키는 한 개의 값 만을 매핑해야 한다.
   즉, 하나의 키에 대응하는 하나의 값을 갖는 구조이다.
   
*/

/*
○ Hashtable<K, V> 클래스

   - 해시 테이블 구조를 개체 모델링화 한 클래스로
     검색이 용이하기 때문에 사용 빈도가 높은 편에 속한다.
   - 해시테이블이란 키(key)와 그에 상응하는 데이터(value)로
     구분된 데이터 구조이다.
   - 데이터를 저장하고, 검색하기 위해서 키(key)로 접근하며
     이 구조에서는 키 값을 부여하면 해당 데이터가 변환된다.
   - 또한, Hashtable 클래스는 key 또는 value 의 값으로 null 을 허용하지 않는다.

*/

import java.util.Hashtable;

public class Test170
{
	private static final String[] names 
		= {"강혜성", "길현욱", "김경태", "김다슬", "김동민", "김민지"};

	private static final String[] tels 
		= {"010-6380-7047", "010-6678-9867", "010-4012-6216", "010-8972-1901", "010-4073-4940", "010-7159-4231"};

	public static void main(String[] args)
	{
		// Hashtable 자료구조 생성
		// key, value 데이터 타입을 동시에 제네릭에 작성해 주어야 한다.
		Hashtable<String, String> ht = new Hashtable<String, String>();

		// ht 라는 Hashtable 자료구조에
		// 배열(names, tels)에 담겨있는 데이터를 요소로 담아내기
		// → put(k, v)

		for (int i = 0; i < names.length; i++)
		{
			// key = name, value = tels
			//ht.put("강혜성", "010-6380-7047");
			ht.put(names[i], tels[i]);
		}

		// ht 라는 Hashtable 자료구조에서
		// key 를 이용하여 데이터 검색
		// → get(k);
		String findName1 = "김동민";
		//String findName1 = "이윤수";	// 존재하지 않는 값을 넣었을 때 키를 찾지 못하면
										// null 을 반환함을 알 수 있다. str == null
		String str = ht.get(findName1);
		
		if(str != null)
		{
			System.out.println(findName1 + " 전화번호 : " + str);

		}
		//else
		//{
		//	System.out.println("테스트");
		//}
		System.out.println();
		//--==>> 김동민 전화번호 : 010-4073-4940


		// true, false 를 반환하는 메소드 containsKey()
		// key를 찾는 메소드이다.
		// ht 라는 Hashtable 자료구조에
		// key 가 존재하는지의 여부 확인
		// → containsKey()
		String findName2 = "이주형";
		if (ht.containsKey(findName2))
		{
			System.out.println(findName2 + " 데이터가 존재합니다.");
		}
		else
		{
			System.out.println(findName2 + " 데이터가 존재하지 않습니다.");
		}
		System.out.println();
		//--==>> 이주형 데이터가 존재하지 않습니다.

		String findName3 = "김민지";
		if (ht.containsKey(findName3))
		{
			System.out.println(findName3 + " 데이터가 존재합니다.");
		}
		else
		{
			System.out.println(findName3 + " 데이터가 존재하지 않습니다.");
		}
		System.out.println();
		//--==>> 김민지 데이터가 존재합니다.


		// ht 라는 Hashtable 자료구조에
		// value 가 존재하는지의 여부 확인
		// → contains()
		String findTel1 = "010-4012-6216";		//  경태 전화번호
		if (ht.contains(findTel1))
		{
			System.out.println(findTel1 + " 데이터가 존재합니다.");
		}
		else
		{
			System.out.println(findTel1 + " 데이터가 존재하지 않습니다.");
		}
		System.out.println();
		//--==>> 010-4012-6216 데이터가 존재합니다.


		// ht 라는 Hashtable 자료구조에서
		// 『길현욱』 데이터 삭제
		// → remove()
		
		ht.remove("길현욱");

		// ※ 『remove()』 메소드는 인자값으로 key를 넘겨받지만
		//    이 때, key 만 삭제되는 것이 아니다.
		//    해당 key 와 연결되어(매핑되어) 있는 value 도 함께 제거된다.

		// 삭제(remove()) 이후 Hashtable 자료구조에 
		// 해당 key 가 존재하는지 확인
		if(ht.containsKey("길현욱"))
			System.out.println("현욱이가 존재합니다.");

		else
			System.out.println("현욱이 어디갔어??????");
		System.out.println();
		//--==>> 현욱이 어디갔어??????


		// 삭제(remove()) 이후 Hashtable 자료구조에 
		// 해당 value 가 존재하는지 확인

		if(ht.contains("010-6678-9867"))
			System.out.println("현욱이 전화번호가 존재합니다.");
		else
			System.out.println("현욱이 전화번호가 존재하지 않습니다.");
		System.out.println();
		//--==>> 현욱이 전화번호가 존재하지 않습니다.
		

		// ※ null 관련 처리

		//ht.put(null, null);				//-- key 와 value 모두 null 인 상태
		//--==>> 에러 발생(런타임 에러)
		//       java.lang.NullPointerException
		
		
		//ht.put("김수환", null);			//-- value 가 null 인 상태
		//--==>> 에러 발생(런타임 에러)
		//       java.lang.NullPointerException
		
		//ht.put(null, "010-1234-5678");	//-- key가 null 인 상태
		//--==>> 에러 발생(런타임 에러)
		//       java.lang.NullPointerException

		
		// 중복된 key 입력
		// ★----------------------------------------------------------
		// 중복된 키를 입력하게 되면, 원래 있던 value 가 덮어 씌워진다.
		// ------------------------------------------------------------
		ht.put("강혜성", "010-1111-1111");
		
		System.out.println(ht.get("강혜성"));
		System.out.println();
		//--==>> 010-1111-1111
		//-- 중복된 key 를 활용하여 데이터를 입력할 경우
		//   기존 "010-6380-7047" 에서 "010-1111-1111" 로 변경되었음을 확인
		//   (덮어쓰기 개념)

		// 중복된 value 입력
		ht.put("김지민", "010-8972-1907");

		System.out.println(ht.get("김다슬"));
		System.out.println(ht.get("김지민"));
		//--==>> 010-8972-1901
		//       010-8972-1907
		// ★-----------------------------------------------
		//-- value 는 중복된 값이 있더라도
		//   기존 데이터에 아무런 영향을 미치지 않음.
		// -------------------------------------------------





	}
}