-
[Java] Map 컬렉션언어/Java 2021. 1. 30. 17:48
Map 컬렉션은 key와 value로 구성된 Map.Entry 객체를 저장하는 구조를 가지고 있습니다. Entry는 Map 인터페이스 내부에 선언된 중첩 인터페이스입니다. 여기서 key와 value는 모두 객체입니다. key는 중복 저장될 수 없지만 value는 중복 저장될 수 있습니다. 기존 저장된 key와 동일한 key로 value를 저장하려 하면 기존 값은 사라지고 새로운 값으로 대체됩니다.
HashMap
HashMap의 키로 사용할 객체는 hashCode()와 equals() 메소드를 재정의해서 동등 객체가 될 조건을 정의해야합니다. 객체가 달라도 동등 객체라면 같은 키로 간주하고 중복 저장되지 않도록 하기 위함입니다. 키와 값의 타입은 기본 타입(primitive type) 을 사용할 수 없고 클래스 및 인터페이스 타입만 사용할 수 있습니다.
Map<String, Integer> hashMap = new HashMap<>(); hashMap.put("김", 1); hashMap.put("김", 10); // 키 중복으로 최신값으로 대체 hashMap.put("이", 2); hashMap.put("박", 3); // {김=10, 이=2, 박=3}
Hashtable
Hashtable은 HashMap과 동일한 내부 구조를 가지고 있습니다. 다른 점은 Hashtable은 동기화된 메소드로 구성되어 있기 때문에 멀티 스레드가 동시에 Hashtable의 메소드를 실행할 수 없고, 하나의 스레드가 실행을 완료해야만 다른 스레드를 실행할 수 있다는 점입니다. 그래서 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있기 때문에 Hashtable은 스레드에 안전합니다.
LinkedHashMap
LinkedHashMap은 HashMap과 동일한 내부 구조를 가지고 있지만 다른 점은 입력된 순서대로 저장/관리합니다.
Map<String, Integer> hashMap = new LinkedHashMap<>(); hashMap.put("이", 2); hashMap.put("김", 1); hashMap.put("박", 3); // {이=2, 김=10, 박=3}
TreeMap
TreeMap은 HashMap과 동일한 내부 구조를 가지고 있지만 다른 점은 입력된 키를 오름차순으로 저장하고 관리합니다.
Map<String, Integer> hashMap = new TreeMap<>(); hashMap.put("4", 2); hashMap.put("1", 1); hashMap.put("2", 3); // {1=1, 2=3, 4=2}