[java] Hashmap, Hashtable

programmeaow·2022년 5월 24일
0

Java

목록 보기
2/13

- map

map은 사원번호나 학번처럼 고유한 구분자인 "key로 데이터(value)를 구분" 하는 기능을 가지고 있는 자료형이다.
value는 동일한 데이터 저장이 가능하지만, key는 중복 데이터를 허용하지 않는다.

map 자료형중 하나로 Hashmap과 HashTable이 있다.

- Hashmap, Hashtable

문법 : HashMap<key, value> //Hashtable도 동일

HashMap<String, String> map = new HashMap<>();
HashMap<String, String> map = new HashMap<String, String>();

Hashmap과 Hashtable도 제네릭을 사용한다.

value를 추가하고 싶을 때는 put을 이용할 수 있다.

HashMap<String, String> map = new HashMap<String, String>();
map.put("첫번째", "1");
map.put("두번째", "2");
map.put("세번째", "3");

key를 이용해 특정 value를 가져오고 싶을 때는 get을 이용하면 된다.
"첫번째" key를 이용하여 1이 출력되게 해보자.

문법 : Hashmap변수명.get(key);

HashMap<String, String> map = new HashMap<String, String>();
map.put("첫번째", "1");
map.put("두번째", "2");
map.put("세번째", "3");

System.out.println(map.get("첫번째")); // 1 출력

key로 데이터( key, value 모두 )를 삭제하는 remove를 이용해서 "첫번째", "1"을 삭제해보자.
remove는 데이터를 삭제한 후 그 value값을 리턴하므로 출력문으로 확인해볼 수 있다.

System.out.println(map.remove("첫번째")); // "첫번째"와 "1" 모두 삭제

출력 : 1

map이 보유한 모든 key가 필요하다면, key 전부를 모아서 반환하는 keyset을 활용할 수 있다.

HashMap<String, String> map = new HashMap<String, String>();
map.put("첫번째", "1");
map.put("두번째", "2");
map.put("세번째", "3");

System.out.println(map.KeySet()); 

출력 : 첫번째, 두번째, 세번째

key 는 getKey( ) 로 활용이 가능하고, value 는 getValue ( )로 활용이 가능하다.

만약 key 뿐만 아니라 모든 value도 함께 가져와야 한다면 Map.Entry에 있는 entrySet을 이용하면 된다.

- Map.Entry

Map.Entry : key와 value값을 한쌍으로 보유하는 API

entrySet과 반목문을 활용하여 모든 데이터를 가져올 수 있다.
아래는 작성 예시이다.

for (Map.Entry<String, String> entry : map.entrySet()) {
		System.out.println(entry.getKey() + " - " + entry.getValue());
}
< 출력 >

첫번째-1
두번째-2
세번째-3

map이 보유한 데이터를 하나씩 순차적으로 반환하므로 반복문과 함께 사용해야하며 반복문 생략시 컴파일 오류가 발생했다.

- Hashmap, Hashtable의 차이

둘은 서로 동일한 map 구조를 가지고 있는데, 차이점은 동기화 지원 여부이다.
Hashmap은 지원하지 않고 Hashtable은 동기화를 지원한다.
따라서 Hashtable은 멀티 스레드 환경에서 해당 메서드를 동시에 수행할 수 없기 때문에, 객체를 안전하게 추가/삭제 할 수 있다.

멀티 스레드 : 하나의 프로그램이 동시에 여러개의 일을 처리할 수 있도록 하는 것

따라서 실행 환경에 따라 Hashmap, Hashtable을 구분하여 사용할 수 있다.

profile
개발이란 뭘까

0개의 댓글