Notice
Recent Posts
Recent Comments
Link
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 는 중복된 값이 있더라도
// 기존 데이터에 아무런 영향을 미치지 않음.
// -------------------------------------------------
}
}