반응형
Map 구현체
TreeMap
이진검색트리의 형태로 키(Key)와 값(Value)의 쌍으로 이루어진 데이터를 저장한다. 검색과 정렬에 적합한 컬렉션 클래스이다.
HashMap이 TreeMap보다 검색에 관한부분은 성능이 더 뛰어나므로 HashMap을 사용하는 것이 좋고,
범위검색이나 정렬이 필요한 경우에는 TreeMap이 더 유리하니 TreeMap을 사용하면된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | public class TreeMapTest { public static void main(String[] args){ String[] firstNames = {"KANG", "KANG", "LEE", "KANG", "CHOI", "KANG", "LEE", "KANG", "KANG", "KANG", "SHIN", "CHOI"}; TreeMap<String, Integer> map = new TreeMap<>(); // 레드블랙트리... for(int i=0; i<firstNames.length; i++){ if(map.containsKey(firstNames[i])){ Integer value = map.get(firstNames[i]); map.put(firstNames[i], new Integer(value.intValue() + 1)); }else{ map.put(firstNames[i], new Integer(1)); } } Iterator it = map.entrySet().iterator(); System.out.println("= 기본정렬 ="); while(it.hasNext()){ Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) it.next(); int value = entry.getValue().intValue(); System.out.println(entry.getKey() + " : " + printBar('#', value) + " " + value); } System.out.println(); Set<Map.Entry<String, Integer>> set = map.entrySet(); List list = new ArrayList(set); Collections.sort(list, new ValueComparator()); it = list.iterator(); System.out.println("= 성이 많은순으로 정렬 ="); while(it.hasNext()){ Map.Entry<String, Integer> entry = (Map.Entry<String, Integer>) it.next(); int value = entry.getValue().intValue(); System.out.println(entry.getKey() + " : " + printBar('#', value) + " " + value); } } public static String printBar(char ch, int value){ char[] bar = new char[value]; for(int i=0; i<bar.length; i++){ bar[i] = ch; } return new String(bar); } } class ValueComparator implements Comparator<Object>{ @Override public int compare(Object o1, Object o2) { if(o1 instanceof Map.Entry && o2 instanceof Map.Entry){ Map.Entry<String,Integer> e1 = (Entry<String,Integer>) o1; Map.Entry<String,Integer> e2 = (Entry<String,Integer>) o2; int v1 = e1.getValue().intValue(); int v2 = e2.getValue().intValue(); return v2-v1 ; } return -1; } } | cs |
-- result --
= 기본정렬 =
CHOI : ## 2
KANG : ####### 7
LEE : ## 2
SHIN : # 1
= 성이 많은순으로 정렬, 명수가 같다면 이름의 내림차순으로 정렬 =
KANG : ####### 7
LEE : ## 2
CHOI : ## 2
SHIN : # 1
(Map을 value로 정렬하기)
기본 TreeMap을 사용했기때문에, Ket가 String의 정렬기준(comparable)에 따라 오름차순으로 정렬이 된것을 볼 수 있다.
Comparator를 구현한 클래스와 Collection.sort() 클래스를 이용하여 , 성이 많은 수 (Value가 많은 수)로 정렬(내림차순) 하되, 성을 가진 사람의 수가 같을경우 이름의 내림차순으로 정렬하게 설정하였다.
(출처 : JAVA의 정석)
반응형
'프로그래밍 노트 > JAVA' 카테고리의 다른 글
[JAVA] 예외처리 - 예외처리 방법 (2) | 2018.09.19 |
---|---|
[JAVA] 예외처리 - 에러 및 예외종류 (0) | 2018.09.19 |
[JAVA] 컬렉션프레임워크(CollectionFramework) 5 - HashMap (0) | 2018.09.13 |
[JAVA] 컬렉션프레임워크(CollectionFramework) 4 - TreeSet (0) | 2018.09.12 |
[JAVA] 컬렉션프레임워크(CollectionFramework) 3 - HashSet (0) | 2018.09.12 |