TreeSet과 TreeMap

성혜·2024년 1월 22일
0

Java

목록 보기
19/25
post-thumbnail

TreeSet

순서가 없고 중복값을 가지지 않는다.

이진 탐색 트리 구조, Binary Search Tree (노드를 2개 가짐)

  • 루트와 비교해서 크면 오른쪽, 작으면 왼쪽에 자식 노드 추가

내부데이터가 되어 있는 구조로 저장. = 정렬이 되어 있는 Set


  • 범위 관련 기능을 제공(=List 계열이 할 수 있음)
    : Set는 HashSet처럼 방번호가 없기 때문에 정렬을 할 수 없었다. 하지만 TreeSet은 정렬을 시켜 내부데이터를 저장해 정렬 기능을 사용할 수 있다.

  • 둘을 비교 했을 때 보통 HashSet이 더 많이 사용됨! Hash 알고리즘이 속도가 빠르기 때문에!

		TreeSet<Integer> set = new TreeSet<Integer>();
		
		set.add(6);
		set.add(2);
		set.add(5);
		set.add(8);
		set.add(1);
		set.add(9);
		set.add(3);
		set.add(4);
		set.add(10);
		set.add(7);
		
		System.out.println(set);
		
		//범위 관련 기능 제공 (=List 계열이 할 수 있음)
		System.out.println(set.first()); //1
		System.out.println(set.last());  //10
		
		//범위 : 시작위치(포함) ~ 끝위치(미포함)
		System.out.println(set.headSet(3)); //3을 찾아서 전까지 가져오기 [1,2]
		System.out.println(set.tailSet(7)); //7을 찾아서 뒤에 값 가져오기 [7,8,9,10]
		System.out.println(set.subSet(3,7)); //[3,4,5,6]
		
		//HashSet & TreeSet > iterator, 향상된 for문
		
		Iterator<Integer> iter = set.iterator();
		
		while(iter.hasNext()) {
			System.out.println(iter.next());
		}
		
		for(int n : set) {
			System.out.println(n);
		}


TreeMap

이진 탐색 트리 > 내부 정렬
키 + 값

: map과 대부분의 기능은 똑같으나 정렬 기능이 추가 된 것!

		TreeMap<String, String> map = new TreeMap<>();
		
		map.put("white", "흰색");
		map.put("black", "검정색");
		map.put("red", "빨강색");
		map.put("blue", "파란색");
		map.put("yellow", "노랑색");
		
		//Key 자동 정렬
		System.out.println(map); //키를 정렬해서 알파벳 순으로 나옴
		
		//map 기능과 똑같음
		System.out.println(map.get("white"));
		
		//Tree구조 기능
		System.out.println(map.firstKey()); //black
		System.out.println(map.lastKey()); //yellow
		
		//요소 자체를 가져옴(key + value)
		System.out.println(map.firstEntry()); //black = 검정색
		System.out.println(map.lastEntry()); //yellow = 노랑색
		
		System.out.println(map.headMap("m")); //알파벳 m과 비교 결과 : {black=검정색, blue=파란색}
		System.out.println(map.tailMap("m")); //{red=빨강색, white=흰색, yellow=노랑색}
		System.out.println(map.subMap("r","w"));//{red=빨강색}
profile
하루를 정리하고 기록합니다.

0개의 댓글