Computer Science/DataStructure

TreeMap

자바의정석 3rd Edition 2권을 참조하였습니다.

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=76083001 

 

Java의 정석

저자는 자바를 소개하는데 그치지 않고 프로그래머로써 꼭 알아야하는 내용들을 체계적으로 정리하였으며 200페이지에 달하는 지면을 객체지향개념에 할애함으로써 이 책 한 권이면 객체지향

www.aladin.co.kr

 

TreeMap

이진검색트리의 형태이고 키와 값의 쌍으로 이루어진 데이터를 저장한다.

검색에 관련한 대부분의 경우에서 HashMap이 TreeMap보다 더 뛰어나나

범위 검색이나 정렬이 필요한 경우에는 TreeMap을 사용하자.

 

TreeMapEx1.java

더보기
package kr.co.dong.datastructure.treemap;

import java.util.*;

public class TreeMapEx1 {
	public static void main(String[] args) {
		String[] data = {"A","K","A","K","D","K","A","K","K","K","Z","D"};
		
		TreeMap map = new TreeMap();
		
		for(int idx = 0; idx < data.length; idx++) {
			if(map.containsKey(data[idx])) {
				Integer value = (Integer)map.get(data[idx]);
				map.put(data[idx], new Integer(value.intValue() + 1));;
			} else {
				map.put(data[idx], new Integer(1));
			}
		}
		
		Iterator it = map.entrySet().iterator();
		
		System.out.println("= 기본정렬 =");
		while(it.hasNext()) {
			Map.Entry entry = (Map.Entry)it.next();
			int value = ((Integer)entry.getValue()).intValue();
			System.out.println(entry.getKey() + " : " + printBar('#', value) + " " + value);
		}
		
		System.out.println();
		
		// map을 ArrayList로 변환한 다음에 Collections.sort()로 정렬
		Set set = map.entrySet();
		List list = new ArrayList(set);	// ArrayList(Collection c)
		
		// static void sort(List list, Comparator c)
		Collections.sort(list, new ValueComparator());
		
		it = list.iterator();
		
		System.out.println("= 값의 크기가 큰 순서로 정렬 =");
		while(it.hasNext()) {
			Map.Entry entry = (Map.Entry)it.next();
			int value = ((Integer)entry.getValue()).intValue();
			System.out.println(entry.getKey() + " : " + printBar('#', value) + " " + value);
		}
	}// public static void main
	
	static class ValueComparator implements Comparator {
		public int compare(Object o1, Object o2) {
			if(o1 instanceof Map.Entry && o2 instanceof Map.Entry) {
				Map.Entry e1 = (Map.Entry)o1;
				Map.Entry e2 = (Map.Entry)o2;
				
				int v1 = ((Integer)e1.getValue()).intValue();
				int v2 = ((Integer)e2.getValue()).intValue();
				return v2 - v1;
			}
			return -1;
		}
	}// static class ValueComparator implements Comparator
	
	public static String printBar(char ch, int value) {
		char[] bar = new char[value];
		
		for(int idx = 0; idx < bar.length; idx++) {
			bar[idx] = ch;
		}
		return new String(bar);
	}
}
/*
= 기본정렬 =
A : ### 3
D : ## 2
K : ###### 6
Z : # 1

= 값의 크기가 큰 순서로 정렬 =
K : ###### 6
A : ### 3
D : ## 2
Z : # 1
*/

TreeMap는 오름차순 정렬 / Comparator를 구현한 Collections.sort(List list, Comparator c)를 이용해 내림차순 정렬

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

'Computer Science > DataStructure' 카테고리의 다른 글

Collections  (0) 2022.11.23
Properties  (0) 2022.11.22
해싱과 해싱함수  (0) 2022.11.21
HashMap과 Hashtable  (0) 2022.11.18
TreeSet  (0) 2022.11.18