728x90
TreeMap
TreeMap은 이진트리를 기반으로 한 Map 컬렉션이다.
TreeMap에 객체를 저장하면, key는 저장과 동시에 자동으로 오름차순으로 정렬된다. (숫자 - 값 오름차순 정렬 / 문자열 : 유니코드 순으로 정렬) 정렬 순서는 기본적으로 부모 키값과 비교해서 키 값이 낮은 것은 왼쪽 자식 노드에 키값이 높은 것은 오른쪽 자식 노드에 Map.Etnry 객체를 저장한다.
TreeMap은 일반적으로 HashMap보다 성능이 떨어진다.
그 이유는 TreeMap이 데이터를 저장할 때 정렬과정을 한 번 거치기 때문이다.
하지만 Map을 정렬상태로 유지해야하거나 정렬된 데이터를 조회해야 할 경우 TreeMap을 사용하는 것이 효율적이다.
즉, key-value쌍을 key를 기준으로 오름차순 정렬할 때 사용하기 좋은 방법이다.
사용법 : HashMap의 모든 데이터를 TreeMap으로 넣는다.
1. HashMap을 선언하고 초기화
Map<String, Employee> map = new HashMap<>();
Employee employee1 = new Employee(1L, "Mher");
map.put(employee1.getName(), employee1);
Employee employee2 = new Employee(22L, "Annie");
map.put(employee2.getName(), employee2);
Employee employee3 = new Employee(8L, "John");
map.put(employee3.getName(), employee3);
Employee employee4 = new Employee(2L, "George");
map.put(employee4.getName(), employee4);
2. Employee 클래스는 Comparable<Employee> 를 implement
public class Employee implements Comparable<Employee>{
private Long id;
private String name;
// constructor, getters, setters
public Employee(long l, String string) {
this.id = l;
this.name = string;
}
public Long getId() { return id; }
public void setId(Long id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
// override equals and hashCode
/*
@Override
public boolean equals(Object obj) {
if (this == obj) return true;
if (obj == null || getClass() != obj.getClass()) return false;
Employee employee = (Employee) obj;
return id == employee.id;
}
@Override
public int hashCode() {
return Objects.hash(id);
}
*/
@Override
public int compareTo(Employee employee) {
return (int)(this.id - employee.getId());
}
@Override
public String toString() {
return "Employee {id=" + id + ", name='" + name + "'}";
}
}
3. 생성자를 활용해서 TreeMap 에 항목 저장
TreeMap<String, Employee> sorted = new TreeMap<>(map);
또는 putAll 메서드를 사용해서 데이터를 복사
TreeMap<String, Employee> sorted = new TreeMap<>();
sorted.putAll(map);
4. 결과 출력
출력하면 map의 항목들이 key값을 기준으로 정렬된 모습을 볼 수 있다.
public class UsingTreeMap {
public static void main(String[] args) {
Map<String, Employee> map = new HashMap<>();
Employee employee1 = new Employee(1L, "Mher");
map.put(employee1.getName(), employee1);
Employee employee2 = new Employee(22L, "Annie");
map.put(employee2.getName(), employee2);
Employee employee3 = new Employee(8L, "John");
map.put(employee3.getName(), employee3);
Employee employee4 = new Employee(2L, "George");
map.put(employee4.getName(), employee4);
//TreeMap<String, Employee> sorted = new TreeMap<>(map);
TreeMap<String, Employee> sorted = new TreeMap<>();
sorted.putAll(map);
//key : String
Iterator<String> iter = sorted.keySet().iterator();
while(iter.hasNext()) {
String name = iter.next();
Employee employee = sorted.get(name);
System.out.println(name+"="+employee.toString());
}
}
}
결과
Annie=Employee{id=22, name='Annie'}
George=Employee{id=2, name='George'}
John=Employee{id=8, name='John'}
Mher=Employee{id=1, name='Mher'}
728x90
'코딩테스트' 카테고리의 다른 글
Sort a HashMap in Java - (3) TreeSet (0) | 2021.03.18 |
---|---|
Sort a HashMap in Java - (2) Using ArrayList (0) | 2021.03.18 |
Sort a HashMap in Java - Sort Function 완성하기 (0) | 2021.03.18 |
[LeetCode] 860. Lemonade Change (2) | 2021.03.18 |
[LeetCode] 1. Two Sum (4) | 2021.03.16 |