java String.compareTo

개발/JAVA / / 2021. 4. 15. 01:00
반응형

자바 문자열 정렬 / 자바 문자열 비교 / 자바 compareTo

자바 비교 / 자바 정렬


java에서 내가 원하는 대로 정렬을 할 때 주로 사용하는 compareTo 메소드에 대해 알아보았다.

api 문서를 보아도 되지만 그냥 툴(Intellij)에서 ctrl + 클릭 으로 compareTo 메소드를 찾아갔다.

(메소드 작성하시고 키보드의 Ctrl 누른 상태로 메소드를 클릭하시면 됩니다. eclipse도 됩니다. )

java.lang.String > compareTo

 

메소드를 까보니, 친절하게 설명이 잘 나와있다

java compareTo 구현 내용

어쩌면 영어 설명보다 코드를 이해하는것이 더 편할 수 도 있겠다.

 

정리하자면, str1.compareTo(str2) 라고 가정했을 때,

str1 과 str2 중 length 가 짧은것을 기준으로 하여 

해당 길이까지의 문자를 하나씩 비교하며 알파벳의 차이를 계산하는것이다.

str1.charAt(idx) - str2.charAt(idx) 를 리턴해준다.

위 코드의 실행결과는 -4 출력

사진 기준으로 설명하자면 a-e 를 했으므로

아스키코드값 기준 97 - 101 이므로 출력 결과는 -4 이다.

 

이런식으로 서로 다른 문자가 있으면 그 차이를 계산해서 리턴해준다.

오름차순으로 정렬되어있다면, 음수가 리턴될 것 이고

오름차순 정렬이 아니라면 == str2가 사전순으로 더 빠른 단어라면? 양수가 리턴될 것 이다.

아, 그래서 리턴값이 양수가 나오면 swap을 해주는구나. 라는 것을 알 수 있다.

 


그럼 만약 둘다 똑같으면?

똑같은 문자열을 비교하면 실행결과는 0이 나온다.

실형결과 : 0

 

 

그럼 만약 길이가 다르다면?

기본적으로는 다른 문자가 나오면 그 차이를 return 해주는데

길이가 짧은 문자열의 끝까지 다 탐색했는데 모두 같은 알파벳이라면?

두 문자열의 길이를 계산하여 리턴한다.  (str1.length - str2.length)

실행결과 : -1

 

 

그런데 만약 정렬 기준을 내 마음대로 정하고싶다면?

Comparater 클래스를 이용하여 compare 메소드를 재정의 해주면 된다.

swap 하고싶은 경우엔 양수를 리턴하도록 작성해주면

리턴값이 0 이상이면 두 요소를 swap 하므로

내가 원하는 방식으로 정렬이 가능하다.

compare override

 

문자열의 길이만 이용해서 정렬하는 내용을 작성하였다.

첫번째 파라미터의 길이가 더 길면 양수가 리턴되므로

문자열의 길이가 짧은것 부터 긴 순서대로 정렬 될 것 이다.

 위 코드의 실행 결과는 다음과 같다.

 

 

 

 

반응형

'개발 > JAVA' 카테고리의 다른 글

메소드 파라미터 배열 사용 이유  (0) 2021.05.12
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기