Sort a HashMap in Java - (1) TreeMap

2021. 3. 18. 22:09·코딩테스트
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'}

 

 

 

 

참고 : www.baeldung.com/java-hashmap-sort

coding-factory.tistory.com/557

728x90
저작자표시 비영리 동일조건 (새창열림)

'코딩테스트' 카테고리의 다른 글

Sort a HashMap in Java - (3) TreeSet  (1) 2021.03.18
Sort a HashMap in Java - (2) Using ArrayList  (0) 2021.03.18
Sort a HashMap in Java - Sort Function 완성하기  (1) 2021.03.18
[LeetCode] 860. Lemonade Change  (2) 2021.03.18
[LeetCode] 1. Two Sum  (4) 2021.03.16
'코딩테스트' 카테고리의 다른 글
  • Sort a HashMap in Java - (3) TreeSet
  • Sort a HashMap in Java - (2) Using ArrayList
  • Sort a HashMap in Java - Sort Function 완성하기
  • [LeetCode] 860. Lemonade Change
heestory217
heestory217
Done is better than Perfect! 좌충우돌 개발일지💻
    250x250
  • heestory217
    Heello World
    heestory217
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • 컴퓨터일반 (0)
      • WEB (1)
      • JAVA (3)
      • Python (9)
      • C (1)
      • DataBase (17)
        • Oracle (2)
        • MySQL (9)
        • SAP HANA (4)
        • PostgreSQL (0)
      • 디버깅∕오류해결 (14)
      • 코딩테스트 (54)
        • 자료구조∕알고리즘 (3)
      • 정보처리기사 (10)
      • Git∕GitHub (7)
      • 기타 (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    IntelliJ
    SAP HANA Studio
    배열 정렬하기
    인텔리제이
    hashmap sort
    정처기 수제비 실기문제
    정처기 실기
    HashMap
    Sort a HashMap in Java
    코딩테스트
    MySQL
    프로그래머스 카카오
    leetcode
    treemap
    Guava library
    정처기 수제비
    정처기 실기 예상문제
    treeset
    파이썬 포맷팅
    정처기 수제비 데일리 문제
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
heestory217
Sort a HashMap in Java - (1) TreeMap
상단으로

티스토리툴바