해싱 개념
HashMap은 키와 값을 묶어서 하나의 데이터로 저장하며, 해싱을 사용하여 많은 양의 데이터를 검색하는데 유용하다.
public class HashMap extends AbstractMap implements Map, Cloneable, Serializable {
transient Entry[] table;
static class Entry implements Map.Entry {
final Object key;
Object value;
}
}
HashMap은 Entry라는 내부 클래스를 새로 정의하여 연관성이 높은 키와 값을 하나의 배열로 다룰 수 있도록 되어 있다.
해싱 기본 사용법
1. HashMap의 생성
HashMap을 생성할 때는 HashMap() 생성자를 이용하며, 인자로 HashMap을 제공하면, 가지고 있는 키와 값쌍으로 초기화된다.
// 해시맵 생성
HashMap hashMap = new HashMap();
HashMap hashMap = new HashMap(secondHashMap);
2. 데이터 입력
데이터를 입력할 때는 put()메소드를 이용한다. 인자의 타입이 Object, Object이기 때문에 어떤 타입이든 넘길 수 있다.
hashMap.put("data1", "1");
hashMap.put("data2", 2); // String타입와 int타입의 혼합도 가능.
hashMap.put("data2", "2");
여기서 data2의 키 값에 값을 두 번 입력하는데, 이 때는 가장 마지막 값으로 덮어씌어진다.
3. 키와 값이 맵에 있는지 확인하는 법
containsKey()와 containsValue() 메소드를 이용한다. containsValue()는 get()과 equals() 메소드를 이용해서도 가능하다.
System.out.println(hashMap.containsKey("data2"));
System.out.println(hashMap.containsValue(2));
hashMap.get("data2").equals(2); // get() 메소드는 인자로 넘어간 키의 value값을 리턴한다.
hashMap.getOrDefaul("data2", null)
// data2의 키가 없으면 null 반환 (null은 다른 값 대체 가능)
4. HashMap의 데이터를 모두 읽어오기
entrySet() 메소드를 이용하여 저장된 키와 값을 Entry형태로 Set에 저장하여 반환받을 수 있다.
Set set = hashMap.entrySet();
Iterator it = set.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
System.out.println("이름 : " + entry.getKey() + ", 점수 : " + entry.getValue());
}
getKey()와 getValues() 메소드를 이용하여 HashMap의 키와 값들의 리스트를 따로 얻을 수도 있다. 여기서 key는 중복을 허용하지 않기 때문에 Set으로 받고 값은 중복을 허용하기 때문에 Collection 타입으로 반환한다.
Set set = hashMap.keySet();
System.out.println(set);
Collection values = hashMap.values();
System.out.println(values);