[Java] Map 인터페이스
2021. 4. 15. 17:54
1. Map Interface ?
- key-value 방식 사용
- 요소의 저장 순서를 유지하지 않음
- 키의 중복을 허용하지 않지만, 값의 중복은 허용 (같은 값을 다른 키로 저장 가능)
- 서로 다른 type의 데이터 저장이 유용 (String, Integer 같이 저장 가능)
- HashMap, TreeMap
2. HashMap 클래스
- Map 컬렉션 클래스에서 가장 많이 사용됨
- Hash algorithm 사용으로 검색 속도가 빠름
2.1 HashMap 생성자
HashMap<String, String> map1 = new HashMap<String, String>();
HashMap<String, String> map2 = new HashMap<>();
HashMap<String, String> map3 = new HashMap<>(map1); // map1의 모든 값 복사하여 map3 생성
HashMap<String, String> map4 = new HashMap<>(10); //초기 용량(capacity)지정
HashMap<String, String> map5 = new HashMap<>(10, 0.7f); //초기 capacity, load factor지정
HashMap<String, String> map6 = new HashMap<String, String>(){{ //초기값 지정
put("a","b");
}};
HashMap 안에 HashMap 넣기
HashMap<String, Object> parentsMap = new HashMap<String, Object>();
HashMap<Integer, Integer> childMap = new HashMap<>();
childMap.put(x, y);
parentsMap.put(key, childMap);
2.2 HashMap 멤버함수
map.put(key, value); // 전달된 key에 대응하는 value로 매핑
map.replace(key, value); // key에 대응하는 값을 value로 대체
map.remove(key); // key에 대응하는 매핑 제거
map.clear(); // 모든 값 제거
map.get(key); // key에 대응하는 value 반환. key 존재하지 않을 경우 null 반환
map.size();
map.isEmpty();
map.containsKey(key); // map에 전달된 key 존재하는지 확인
map.containsValue(value); // map에 전달된 value에 해당하는 하나 이상의 key 존재하는지 확인
map.getOrDefault(key, x); // key 값이 존재하면 해당 key에 대응하는 value 반환, 없다면 x 반환
2.3 HashMap 값 출력
간단한 방법
HashMap<Integer, String> map = new HashMap<Integer, String>(){{ // 초기값 지정
put(1,"사과");
put(2,"바나나");
put(3,"포도");
}};
System.out.println(map); // 전체 출력 : {1=사과, 2=바나나, 3=포도}
System.out.println(map.get(1)); // key값 1의 value얻기 : 사과
entrySet() 사용
key와 value 모두 필요할 경우 사용. 많은 양의 데이터를 가져올 경우 편리.
for (Entry<Integer, String> entry : map.entrySet()) {
System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
keySet() 사용
map에 존재하는 모든 key로 만들어진 set 객체 반환
for(Integer i : map.keySet()){ // set에 저장된 key값 확인
System.out.println("[Key]:" + i + " [Value]:" + map.get(i));
}
Iterator 사용
// entrySet().iterator()
Iterator<Entry<Integer, String>> entries = map.entrySet().iterator();
while(entries.hasNext()){
Map.Entry<Integer, String> entry = entries.next();
System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:바나나
//[Key]:3 [Value]:포도
//keySet().iterator()
Iterator<Integer> keys = map.keySet().iterator();
while(keys.hasNext()){
int key = keys.next();
System.out.println("[Key]:" + key + " [Value]:" + map.get(key));
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:바나나
//[Key]:3 [Value]:포도
//values().iterator()
Iterator<Integer> values = map.values().iterator();
while(it.hasNext()) {
int value = values.next();
System.out.println( "[Value]:" + value);
}
3. TreeMap 클래스
- Red-Black tree 형태로 map-entry 저장
- TreeMap에 객체 저장시 자동 정렬 ( key에 대한 오름차순 )
- 추가, 삭제가 HashMap에 비해 느리지만 탐색은 편리함
3.1 TreeMap 생성자
TreeMap<Integer, String> map1 = new TreeMap<Integer,String>();
TreeMap<Integer, String> map2 = new TreeMap<>();
TreeMap<Integer, String> map3 = new TreeMap<>(map1); // map1의 모든 값을 복사한 요소를 가진 map3 생성
TreeMap<Integer, String> map6 = new TreeMap<Integer, String>(){{ // 초기값 설정
put(1,"a");
}};
3.2 TreeMap 멤버함수
map.put(key, value);
map.remove(key);
map.clear();
map.size();
map.replace(key, value);
map.containsKey(key);
map.containsValue(value);
map.get(key); // key 값의 entry 얻기
map.firstEntry(); // 최소(첫 번째) key와 대응하는 entry 반환
map.firstKey(); // 최소 key 반환
map.lastEntry(); // 최대(마지막) key와 대응하는 entry 반환
map.lastKey(); // 최대 key 반환
map.ceilingEntry(key); // 전달된 key 이상의 key 중 최소 key의 entry 반환, 없다면 null
map.ceilingKey(key); // 전달된 key 이상의 key 중 최소 key 반환, 없다면 null
map.floorEntry(key); // 전달된 key 이하의 key 중 최대 key의 entry 반환, 없다면 null
map.floorKey(key); // 전달된 key 이하의 key 중 최소 key 반환, 없다면 null
map.higherEntry(key); // 전달된 key보다 작은 key 중 최대 key의 entry 반환, 없다면 null
map.higherKey(key); // 전달된 key보다 작은 key 중 최대 key 반환, 없다면 null
map.lowerEntry(key); // 전달된 key보다 큰 key 중 최소 key의 entry 반환, 없다면 null
map.lowerKey(key); // 전달된 key보다 큰 key 중 최소 key 반환, 없다면 null
map.descendingMap(); // map의 모든 매핑 역순으로 반환
map.haedMap(key); // map에서 key 미만의 부분 반환
map.subMap(fromKey, toKey); // map에서 [fromKey, toKey) 부분 반환
map.tailMap(fromKey); // map에서 fromKey 이상의 부분 반환
3.3 TreeMap 값 출력
HashMap과 동일
'Java' 카테고리의 다른 글
[Java] String 클래스 메소드 (0) | 2021.04.24 |
---|---|
[Java] Arrays 클래스 (0) | 2021.04.18 |
[Java] 문자열(String) 비교 (0) | 2021.04.14 |
[Java] Iterator (0) | 2021.04.12 |
[Java] list (0) | 2021.04.12 |