HashMap은 hash table에 데이터를 저장하는데 hash table은 배열과 linked list로 구성된다.
Map 컬렉션은 key와 value로 구성된 객체이며 key와 value도 각각 객체다.
key는 중복될 수 없지만 value는 중복 저장이 가능하다.
구현 클래스로는 HashMap, Hashtable, LinkedHashMap, Properties, TreeMap이 있다
[HashMap]
public static void main(String[] args) {
HashMap map = new HashMap();
map.put("a", 123);
map.put("b", 456);
map.put("c", 789);
System.out.println(map);
}
위의 코드에서 보면 HashMap 객체를 생성하고 put 메소드로 새로운 객체를 추가했다.
map.put("a", 123);
map.put("b", 456);
map.put("c", 789);
System.out.println(map);
[Console]
{a=123, b=456, c=789}
console에서 key=value로 저장된 것을 확인할 수 있다.
System.out.println(map.get("four"));
key("four")로 데이터를 찾아보면 나중에 저장된 value 30을 출력한다
요약: map의 경우 put으로 key와 value를 지정해 데이터를 저장하며 key가 중복되는 경우에는 나중에 저장된 데이터로 한번만 저장된다.
주요 메서드로는 entrySet, keySet, values가 있다.
entrySet은 키-값 한 쌍의 데이터를 가져올 때, keySet은 key 데이터만 필요할 때, values는 value 데이터만 확인하고 싶을 때 사용한다.
map의 key만 뽑아서 데이터를 출력해보자
Set<String> keySet = map.keySet();
Iterator<String> keyIterator = keySet.iterator();
while(keyIterator.hasNext()) {
String key = keyIterator.next();
int value = map.get(key);
System.out.println(key +": " + value);
}
map.keySet()으로 key만 뽑아서 Set 컬렉션 안에 넣어준다
Iterator로 map의 key를 뽑아 주고 key의 데이터 타입은 string이기 때문에 동일한 타입으로 설정해준다
keyIterator.hasNext()
key가 있으면 (true)라면 다음 key를 찾는 while문을 돌린다
String key = keyIterator.next();
int value = map.get(key);
가져온 key는 String 타입의 key에 담고 가져온 value도 int 타입의 value에 담아준다
여기서 entry란 키-값 하나의 묶음을 의미한다.
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
while (entryIterator.hasNext()) {
Map.Entry<String,Integer> entry = entryIterator.next();
String key = entry.getKey();
Integer value = entry.getValue();
System.out.println(key +": "+ value);
}
keySet 이외에 entrySet 으로도 데이터를 출력할 수 있다.
map.remove("one");
삭제하고자 하는 key를 넣어 해당 객체만 삭제한다.