java - TreeSet

imjingu·2023년 9월 5일
0

개발공부

목록 보기
460/481

TreeSet

null 입력은 가능하지만 한 번만 저장 가능하고 중복될 수 없습니다.
객체(데이터)를 중복 저장할 수 없습니다.
이진 검색 트리(Binary Search Tree) 구조를 기반으로 하여 자동으로 오름차순으로 데이터를 정렬합니다.
내부적으로 TreeMap을 사용합니다.

package chapter20230905.TreeSet;

import java.util.*;

public class TreeSet_01 {
	public static void main(String[] args) {
		TreeSet<String> treeSet = new TreeSet<>();
		treeSet.add("홍길동");
		treeSet.add("강감찬");
		treeSet.add("이순신");
		treeSet.add("강감찬");
		
		for(String str : treeSet) {
			System.out.println(str);
		}
		// 오름차순으로 정렬되어 출력 , 중복값은 저장안됨
		/*
		 강감찬
		 이순신
		 홍길동
		 */
	}
}

정렬을 변경하는 방법.

  1. Comparable 인터페이스 구현
    정렬을 구현하는 데 사용하는 인터페이스이고 compareTo() 메서드를 구현해야 함.
    첫 번째 매개변수가 더 클때 양수를 반환하여 오름차순으로 정렬.

a.compareTo(b) :
현재 객체 < 파라미터로 넘어온 객체: 음수 리턴
현재 객체 == 파라미터로 넘어온 객체: 0 리턴
현재 객체 > 파라미터로 넘어온 객체: 양수 리턴
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 바뀐다.

  1. Comparator 인터페이스 구현
    정렬을 구현하는 데 사용하는 인터페이스이고 compare() 메서드를 구현해야 함.
    compareTo() 메서드는 this와 전달된 매개변수를 비교하였다면, compare() 메서드는 전달되는 두 매개변수를 비교.
    compare() 메서드에는 매개변수가 2개 전달.

compare(a, b)
첫 번째 파라미터로 넘어온 객체 < 두 번째 파라미터로 넘어온 객체: 음수 리턴
첫 번째 파라미터로 넘어온 객체 == 두 번째 파라미터로 넘어온 객체: 0 리턴
첫 번째 파라미터로 넘어온 객체 > 두 번째 파라미터로 넘어온 객체: 양수 리턴
음수 또는 0이면 객체의 자리가 그대로 유지되며, 양수인 경우에는 두 객체의 자리가 변경된다.

일반적으로 Comparator 인터페이스 보다는 Comparable 인터페이스를 더 많이 사용.
다만 어떤 클래스가 이미 Comparable 인터페이스를 구현한 경우에 이 클래스의 정렬 방식을 정의할 때 Comparator 인터페이스를 사용.
String 클래스가 Comparable 인터페이스를 구현했고, compareTo() 메서드는 오름차순을 구현.

package chapter20230905.TreeSet;

import java.util.*;

class MyCompare implements Comparator<String> {
	@Override
	public int compare(String s1, String s2) {
		return (s1.compareTo(s2)) * -1 ; // String 클래스의 compareTo() 메서드를 반대로
	}
}
public class TreeSet_02 {
	public static void main(String[] args) {
		
		// Set<String> set = new TreeSet<String>();
		// TreeSet 생성자에 Comparator를 구현한 객체를 매개변수로 전달함
		// String 클래스를 수정할 수 없으니 TreeSet 생성자에 넘김.
		
		Set<String> set = new TreeSet<>();
		set.add("aaa");
		set.add("ccc");
		set.add("bbb");
		
		System.out.println(set); // [aaa, bbb, ccc]
	}
}

0개의 댓글