자바/++

[Java] compareTo()

backend dev 2022. 12. 5.

자바 Wrapper클래스에서 사용 할 수 있는 compareTo() 메소드

- int compareTo(NumberSubClass referenceName)
- int compareTo(String anotherString)

숫자비교

 

Byte,Integer... 등에서 compareTo()를 사용해서 숫자비교를 한다면 

 

자기자신.compareTo()  의 결과로

 

자기자신이 더크다면 1

자기자신과 크기가 같다면 0

자기자신이 더 작다면 -1

의 결과값을 리턴해준다. 

 

왜이렇게 리턴해주는가 -> 자기 자신이 들어온 값보다 ~더 크다!와 같이 생각하면 편하다

 

[Java] Comparator , Comparable , 익명객체(클래스)

Comparable, Comparator는 모두 인터페이스이다. 인터페이스 이므로 Comparable, Comparator를 사용하고자 한다면 인터페이스내에 선언된 메소드를 구현해야한다! Comparable 내부에는 compareTo(T o)라는 메소드가

keeeeeepgoing.tistory.com

Integer a = 2;
bw.write(a.compareTo(1)+"\n");  //2가 알아서 Integer형으로 오토 박싱되므로 돌아감
bw.write(a.compareTo(2)+"\n");
bw.write(a.compareTo(3)+"\n");

2는 1보다 1더 크다 -> 1 리턴

2는 2보다 0만큼 더 크다 -> 0 리턴

2는 3보다 -1만큼 더 크다 -> -1 리턴

 

문자열 비교

 

String과 같은 객체에서 .compareTo() 메소드를 이용하여 문자열 비교를 했을때 결과

String a = "abcd";
bw.write(a.compareTo("abcd")+"\n");
bw.write(a.compareTo("abc")+"\n");
bw.write(a.compareTo("ab")+"\n");
bw.write(a.compareTo("a")+"\n");
bw.write(a.compareTo("c")+"\n");
bw.write(a.compareTo("czxc")+"\n");

문자열 비교는 사전순으로 비교해준다.

그리고 문자열 길이가 같은것끼리는 맨 앞단어 부터 하나씩 아스키코드값을 비교해서 정렬할것이다. 

 

"abcd" 와 "abcd 비교 -> 같은 문자열은 0으로 리턴

"abcd" 와 "abc" 비교 -> abcd는 abc와 다르게 뒤에 d가 하나 더 붙어있다. 사전순으로  abc보다 뒤에있어야한다. "abcd"와 자리를 바꿔야한다. -> 1리턴(양수) -> 문자열길이차이임(비교대상이 기준대상에 포함되는 문자열일시)

 

"abcd"와 "c" 비교 -> 맨앞에 "a"와 "c"를 비교한다 -> a가 사전순으로 더 앞서므로 음수 리턴 (자리 바꾸지않음)

"abcd"와 "czxc"비교 -> 위와 같은 이유로 음수 리턴  ( a와 c의 아스키코드 차이값인 -2를 리턴해줌)

 

문자열 비교는 그냥 사전으로 정렬된다고 생각하면된다.

내부동작은 조금 복잡 

 

 

[JAVA] 자바_compareTo ( 값 [문자열/숫자] 비교 )

compareTo() - int compareTo(NumberSubClass referenceName) - int compareTo(String anotherString) - compareTo() 함수는 두개의 값을 비교하여 int 값으로 반환해주는 함수이다. compareTo() 함수에는 위에서 설명하는바와 같이 "

mine-it-record.tistory.com

 

댓글