TreeMap
TreeMap이란?
TreeMap은 이진트리를 기반으로 한 Map 컬렉션입니다.
같은 Tree구조로 이루어진 TreeSet과의 차이점은 TreeSet은 그냥 값만 저장한다면 TreeMap은 키와 값이 저장된 Map, Etnry를 저장한다는 점입니다.
TreeMap에 객체를 저장하면 자동으로 정렬되는데, 키는 저장과 동시에 자동 오름차순으로 정렬되고 숫자 타입일 경우에는 값으로, 문자열 타입일 경우에는 유니코드로 정렬합니다. 정렬 순서는 기본적으로 부모 키값과 비교해서 키 값이 낮은 것은 왼쪽 자식 노드에 키값이 높은 것은 오른쪽 자식 노드에 Map.Etnry 객체를 저장합니다.
TreeMap은 일반적으로 Map으로써의 성능이 HashMap보다 떨어집니다.
TreeMap은 데이터를 저장할 때 즉시 정렬하기에, 추가나 삭제가 HashMap보다 오래 걸립니다.
하지만 정렬된 상태로 Map을 유지해야 하거나 정렬된 데이터를 조회해야 하는 범위 검색이 필요한 경우 TreeMap을 사용하는 것이 효율성면에서 좋습니다.
TreeMap 사용법
TreeMap 선언
TreeMap<Integer,String> map1 = new TreeMap<Integer,String>();//TreeMap생성
TreeMap<Integer,String> map2 = new TreeMap<>();//new에서 타입 파라미터 생략가능
TreeMap<Integer,String> map3 = new TreeMap<>(map1);//map1의 모든 값을 가진 TreeMap생성
TreeMap<Integer,String> map6 = new TreeMap<Integer,String>(){{//초기값 설정
put(1,"a");
}};
생성하는 명령어는 HashMap과 크게 다르지 않으나 선언 시 크기를 지정해줄 수는 없습니다.
TreeMap 값 추가
TreeMap<Integer,String> map = new TreeMap<Integer,String>();//TreeMap생성
map.put(1, "사과");//값 추가
map.put(2, "복숭아");
map.put(3, "수박");
map.put(1, "자두"); // key 1의 값이 "자두"로 변경됨
map.put(4,[a,b,c]); //정상적으로 저장되지 않음
TreeMap 값 삭제
TreeMap<Integer, String> map = new TreeMap<Integer,String>(){{//초기값 설정
put(1, "사과");//값 추가
put(2, "복숭아");
put(3, "수박");
}};
map.remove(1); //key값 1 제거
map.clear(); //모든 값 제거
TreeMap 단일 값 출력
//초기값 설정
TreeMap<Integer,String> map = new TreeMap<Integer,String>(){{
//값 추가
put(1, "사과");
put(2, "복숭아");
put(3, "수박");
}};
//전체 출력
System.out.println(map); //{1=사과, 2=복숭아, 3=수박}
//key값 1의 value얻기
System.out.println(map.get(1)); // 사과
//최소 Entry 출력
System.out.println(map.firstEntry()); // 1=사과
//최소 Key 출력
System.out.println(map.firstKey()); //1
//최대 Entry 출력
System.out.println(map.lastEntry()); // 3=수박
//최대 Key 출력
System.out.println(map.lastKey()); // 3
TreeMap 전체 값 출력
TreeMap<Integer,String> map = new TreeMap<Integer,String>(){{//초기값 설정
put(1, "사과");//값 추가
put(2, "복숭아");
put(3, "수박");
}};
//entrySet() 활용
for (Entry<Integer, String> entry : map.entrySet()) {
System.out.println("[Key]:" + entry.getKey() + " [Value]:" + entry.getValue());
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:복숭아
//[Key]:3 [Value]:수박
//KeySet() 활용
for(Integer i : map.keySet()){ //저장된 key값 확인
System.out.println("[Key]:" + i + " [Value]:" + map.get(i));
}
//[Key]:1 [Value]:사과
//[Key]:2 [Value]:복숭아
//[Key]:3 [Value]:수박
entrySet()은 key와 value 모두가 필요할 경우 사용하며
keySet()은 key 값만 필요할 경우 사용하는데 key값을 이용해서 value를 찾는 과정에서 시간이 많이 소모되므로
많은 양의 데이터를 가져와야 한다면 entrySet()이 좋습니다.(약 20%~200% 성능 저하가 있음)
Iterator 사용
TreeMap<Integer,String> map = new TreeMap<Integer,String>(){{//초기값 설정
put(1, "사과");//값 추가
put(2, "복숭아");
put(3, "수박");
}};
//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]:수박
728x90
'Java' 카테고리의 다른 글
[Java] LocalDate 비교 (0) | 2023.08.10 |
---|---|
[JAVA] HashMap, LinkedHashMap - value로 key찾기 (0) | 2023.08.09 |
[JAVA] Set과 Map의 차이 (0) | 2023.07.27 |
[JAVA] Java HashMap, LinkedHashMap, TreeMap (0) | 2023.02.16 |
[JAVA] 변수형 타입 변환하기 (0) | 2022.12.06 |