자바 컬렉션 정리 (2) - Map
Map 은 python 에서 자주 쓰던 dictionary 와 같다.
Key : Value의 쌍으로 구성되어 data 를 넣어놓기에 유용하다.
Map 은 인터페이스이고, 이를 구현하기 위한 구현체로 HashMap, TreeMap, LinkedHashMap 등이 있다.
그 중 HashMap 에 대해 자세히 정리해보겠다.
HashMap
- Map 의 구현체
- Key, Value 로 구성된 Entry 객체를 저장하는 구조임
- Key, Value 역시 모두 객체임
- 파이썬의 Dictionary 와 마찬가지로 Key 는 중복될 수 없다. 같은 Key 로 값을 저장하면 기존의 값은 없어지고 새로운 값으로 엎어친다.
- Hashing 을 사용하기 때문에 많은 양의 데이터를 검색할 때 뛰어난 성능을 보인다.
Hashing 이란
Hash 합수를 이용해서 데이터를 해시 테이블에 저장하고 검색하는 기법이다.
데이터가 저장되어 있는 곳을 알려주며, 다량의 데이터 중에서 원하는 데이터를 빠르게 찾을 수 있다.
Key 값을 Hashing 하여 저장하는 Bit 이라는 곳에 저장한다고 하는데, 일단은 잘 모르겠다.
지금은 일단 어떻게 사용하는지에 대해서만 간략하게 정리해두고 ,
다시 이해도가 높아졌을때 볼만한 내부 구현과 관련되어 참고할만한 컨텐츠를 정리해두었다.
Java의 HashMap에 대해
해싱, 해시함수, 해시테이블 · ratsgo's blog
일단 넘어가 보자.
HashMap 사용법
- 선언
HashMap<String, String> map1 = new HashMap<String, String>(); // 생성
HashMap<String, String> map2 = new HashMap<>(map1); // map1 모든 값을 가진 HashMap 생성
HashMap<String, String> map3 = new HashMap<>(10); // 초기 용량 지정
HashMap<String, String. map5 = new HashMap<>(10, 0.7f);
- 추가 :
put
import java.util.HashMap;
import java.util.Map;
public class TestHashMap {
public static void main(String[] args) {
// Map 일단 하나 생성할 것
HashMap<String, Integer> map1 = new HashMap<>();
map1.put("Don", 2);
map1.put("Ken", 3);
map1.put("Oksu", 5);
}
}
containsKey
: HashMap 에 키가 있는지 여부 확인public static void main(String[] args){ Map<Integer, String> map = new HashMap<>(); map.put(1, "Don"); map.put(2, "Ken"); map.put(3, "Han"); if (!map.containsKey(2)) map.put(2, 300); System.out.println(map); System.out.println(map.get(1)); }
remove
: 요소 제거
import java.util.HashMap;
import java.util.Map;
public class TestHashMap {
public static void main(String[] args) {
HashMap<String, Integer> map1 = new HashMap<>();
map1.put("George", 2);
map1.put("Elison", 3);
map1.put("Elizabeth", 5);
map1.put("Oksu", 10);
map1.remove("Oksu"); // 제거
}
}
- HashMap 값 출력
- entrySet() : key + value entry 를 Set 으로 넘기고, for 문을 통해 Set 을 확인하는 방식
- keySet() : key 를 Set 으로 넘기고, for 문을 통해 map.get(key) 로 value 를 확인하는 방식
import java.util.HashMap;
import java.util.Map;
public class TestHashMap {
public static void main(String[] args) {
// Map 일단 하나 생성할 것
HashMap<String, Integer> map1 = new HashMap<>();
map1.put("Don", 2);
map1.put("Ken", 3);
map1.put("Oksu", 5);
HashMap<String, Integer> map2 = new HashMap<>(map1);
// entrySet() 활용
for (Map.Entry<String, Integer> stringIntegerEntry : map2.entrySet()) {
System.out.println("Key: " + stringIntegerEntry.getKey() + ", Value:" + stringIntegerEntry.getValue());
}
// Key: Don, Value:2
// Key: Ken, Value:3
// Key: Oksu, Value:5
for (Map.Entry<String, Integer> stringIntegerEntry : map2.entrySet()) {
System.out.println("Key: " + stringIntegerEntry.getKey() + ", Value:" + stringIntegerEntry.getValue());
}
for (String key : map2.keySet()) {
System.out.println("Key: "+ key + ", Value: " + map2.get(key));
}
}
}
오늘 궁금한것
-
HashMap<String,String> map5 = new HashMap<>(10, 0.7f);//초기 capacity,load factor지정
-
Comparator :Tree Set 에 넣어서 쓰는 것 같은데, 잘 모르겠음 ???
-
그리고, 읽어봤는데 뭔가 어려움
댓글