TreeSet의 객체
TreeMap의 키는
저장과 동시에 자동 오름차순으로 정렬된다.
숫자 타입(Integer, Double): 숫자 값으로 정렬
문자 타입(String): 유니코드 정렬
System.out.println(Arrays.toString(str));// [3, 30, 9]
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) { // 3, 30 --> 303 vs 330 : -1 리턴
System.out.println("compare:: "+o1+" "+o2);//compare:: 30 3 // compare:: 9 30
System.out.println((o2+o1).compareTo(o1+o2));// 3 // -6
return (o2+o1).compareTo(o1+o2);//문자열 비교 int 반환
// A.compareTo(B) A는 B보다 작다 : -1 리턴 -> 자리 바꿈
// B.compareTo(A) B는 A보다 크다 : 1 리턴 -> 자리 안바꿈
}
});
Comparable
리턴 타입 | 메소드 | 설명 |
int | compareTo(객체) | 주어진 객체와 같으면 0 리턴 주어진 객체보다 작으면 음수 리턴 주어진 객체보다 크면 양수 리턴 |
재정의(오버라이딩)하며 쓴다
public class Person implements Comparable<Person> {
public String name;
public int age;
public Person(String name, int age){
this.name = name;
this.age = age;
}
@Override
public int compareTo(Person o) {
if(age<o.age){ // 1-4 = -3
return -1; //오름차순
}else if (age == o.age){
return 0;
}else
return 1;
}
}
main
package com.company;
import java.util.Iterator;
import java.util.TreeSet;
public class test15 {
public static void main(String[] args) {
TreeSet<Person> treeSet = new TreeSet<Person>();
treeSet.add(new Person("홍길동",45));
treeSet.add(new Person("홍길동2",25));
treeSet.add(new Person("홍길동3",31));
// 자동정렬 => 출력 === 그냥 오름차순
Iterator<Person> iter = treeSet.iterator();
while (iter.hasNext()){
Person person = iter.next();//값(Person객체) 가져오기
System.out.println(person.name+" "+person.age);
}
}
}
Comparator
리턴 타입 | 메소드 | 설명 |
int | compare(객체1, 객체2) | 객체1과 객체2 같으면 0 리턴 객체1보다 객체2가 앞에 오려면 음수 리턴 객체2보다 객체1이 앞에 오려면 양수 리턴 |
숫자를 문자로 바꿔서 내림차순을 사용한다.
내림차순의 두번째 파라미터는 함수가 오나보다.
Arrays.sort(string_array, Collections.reverseOrder() );//내림 정렬
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o2+o1).compareTo(o1+o2);
}
}); // 문자를 합친 것을 비교함
package com.company;
import java.util.Arrays;
import java.util.Comparator;
public class programmers3_1 {
public static void main(String[] args) {
//https://programmers.co.kr/learn/courses/30/lessons/42746
int[] numbers = {3, 30, 34, 5, 9};
int[][] commands = {{2, 5, 3}, {4, 4, 1}, {1, 7, 3}};
String str ="";
String result = Solution.solution(numbers);
}
static class Solution {
public static String solution(int[] numbers) {
String answer = "";
String[] str = new String[numbers.length];
for(int i=0; i<numbers.length; i++){
str[i] = String.valueOf(numbers[i]);
}
System.out.println(Arrays.toString(str));// [3, 30, 34, 5, 9]
Arrays.sort(str, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return (o2+o1).compareTo(o1+o2);
}
});
System.out.println(Arrays.toString(str));// [9, 5, 34, 30, 3] // [9, 5, 34, 3, 30]
return answer;
}//solution end
}
}
'학습 기록 (Learning Logs) > 알고리즘 개념 정리' 카테고리의 다른 글
[java] Math 클래스, String (0) | 2021.09.27 |
---|---|
[java] stream (0) | 2021.09.27 |
[java] Array, List, Set, Map (0) | 2021.09.26 |
[java] 형 변환 (0) | 2021.09.25 |
[java] 입력 Scanner BufferedReader 비교 (0) | 2021.09.25 |