티스토리 뷰

JAVA(프로그래밍)

java TreeMap 클래스 사용법

알 수 없는 사용자 2018. 7. 25. 07:00

java TreeMap 클래스 사용법

 

안녕하세요. 이전 포스팅에서는 java linkedHashMap에 대해 알아봤습니다.
이번에 알아볼 클래스는 java TreeMap 입니다.
정렬 기능을 가지고 있어서 정렬이 필요할때 사용하시면 됩니다.
히자만 실무에서는 그다지 사용할 일이 없습니다.
여지껏 한번도 실무에서 사용해 본적이 없는 기능입니다.


예제 소스를 통해서 메소드 기능들을 하나씩 알아보도록 하겠습니다.
-------------------------------------------------------------------------------------------------------

package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class Test {

 @SuppressWarnings("unchecked")
 public static void main(String[] args) {
  // TODO Auto-generated method stub

  String[] data = { "a", "k", "a", "k", "c", "a", "k", "a", "c", "k", "c", "o", "a" ,"z","o"};

  int value;

  TreeMap map = new TreeMap();

  for (int i = 0; i < data.length; i++) {

   if (map.containsKey(data[i])) {

    value = (Integer) map.get(data[i]);

    map.put(data[i], value + 1);

   }

   else
    map.put(data[i], 1);

  }

  Iterator it = map.entrySet().iterator();

  System.out.println("\n내림차순으로 정렬이 된다");
  while (it.hasNext()) {

   Map.Entry e = (Entry) it.next();

   System.out.println(e.getKey() + " : " + e.getValue());

  }

  Set set = map.entrySet();

  List list = new ArrayList(set); // ArrayList(Collection c)

  Collections.sort(list, new ValueComparator("ASC"));
 


  it = list.iterator();
  System.out.println("-------------------------");

  System.out.println("\n오름차순으로 정렬이 된다");
  while (it.hasNext()) {

   Map.Entry e = (Entry) it.next();

   System.out.println(e.getKey() + " : " + e.getValue());
  }

 }

 static class ValueComparator implements Comparator {

  private String gubun;
  public ValueComparator(String gubun) {
   gubun = this.gubun;
  }

  @Override
  public int compare(Object o1, Object o2) {

   if (o1 instanceof Map.Entry && o2 instanceof Map.Entry) {

    Map.Entry e1 = (Entry) o1;

    Map.Entry e2 = (Entry) o2;

    int value1 = (Integer) e1.getValue();

    int value2 = (Integer) e2.getValue();
   

    if("DESC".equals(gubun)) {
     return value2 - value1; // DESC [K:6, A:3, D:2, Z:1]
    }else {
      return value1 - value2; //ASC 
    }
   }

   return -1;

  }

 }

}
------------------------------------------------------------------------------------------------

결과값입니다.

 

내림차순으로 정렬이 된다
a : 5
c : 3
k : 4
o : 2
z : 1
-------------------------

오름차순으로 정렬이 된다
z : 1
o : 2
c : 3
k : 4
a : 5

 

 

 

결과값을 보시면 원하는 소트순으로 정렬이 된걸 알수 있습니다.

내림차순으로 정렬 혹은 오름차순으로 정렬이 가능합니다.

 

Collections.sort 를 사용하기 위해서는

에 Comparable<T>를 오버라이딩 구현해주시면 됩니다.

사용예 ) Collections.sort(list, new ValueComparator("ASC"));

파라메터값으로 DESC를 주면 내림차순 그외 문자일경우는 오름차순으로 정렬이 되게 구현 하였습니다.

필요한 정렬 방식에 따라 파라메터를 주시면 될듯 싶습니다.


지금까지  예제소스를 통해서 Java TreeMap 사용법에 대해 알아봤습니다.

댓글