자바 문자열 정렬 / 자바 문자열 비교 / 자바 compareTo
자바 비교 / 자바 정렬
java에서 내가 원하는 대로 정렬을 할 때 주로 사용하는 compareTo 메소드에 대해 알아보았다.
api 문서를 보아도 되지만 그냥 툴(Intellij)에서 ctrl + 클릭 으로 compareTo 메소드를 찾아갔다.
(메소드 작성하시고 키보드의 Ctrl 누른 상태로 메소드를 클릭하시면 됩니다. eclipse도 됩니다. )
메소드를 까보니, 친절하게 설명이 잘 나와있다
어쩌면 영어 설명보다 코드를 이해하는것이 더 편할 수 도 있겠다.
정리하자면, str1.compareTo(str2) 라고 가정했을 때,
str1 과 str2 중 length 가 짧은것을 기준으로 하여
해당 길이까지의 문자를 하나씩 비교하며 알파벳의 차이를 계산하는것이다.
str1.charAt(idx) - str2.charAt(idx) 를 리턴해준다.
사진 기준으로 설명하자면 a-e 를 했으므로
아스키코드값 기준 97 - 101 이므로 출력 결과는 -4 이다.
이런식으로 서로 다른 문자가 있으면 그 차이를 계산해서 리턴해준다.
오름차순으로 정렬되어있다면, 음수가 리턴될 것 이고
오름차순 정렬이 아니라면 == str2가 사전순으로 더 빠른 단어라면? 양수가 리턴될 것 이다.
아, 그래서 리턴값이 양수가 나오면 swap을 해주는구나. 라는 것을 알 수 있다.
그럼 만약 둘다 똑같으면?
똑같은 문자열을 비교하면 실행결과는 0이 나온다.
그럼 만약 길이가 다르다면?
기본적으로는 다른 문자가 나오면 그 차이를 return 해주는데
길이가 짧은 문자열의 끝까지 다 탐색했는데 모두 같은 알파벳이라면?
두 문자열의 길이를 계산하여 리턴한다. (str1.length - str2.length)
그런데 만약 정렬 기준을 내 마음대로 정하고싶다면?
Comparater 클래스를 이용하여 compare 메소드를 재정의 해주면 된다.
swap 하고싶은 경우엔 양수를 리턴하도록 작성해주면
리턴값이 0 이상이면 두 요소를 swap 하므로
내가 원하는 방식으로 정렬이 가능하다.
문자열의 길이만 이용해서 정렬하는 내용을 작성하였다.
첫번째 파라미터의 길이가 더 길면 양수가 리턴되므로
문자열의 길이가 짧은것 부터 긴 순서대로 정렬 될 것 이다.
위 코드의 실행 결과는 다음과 같다.
'개발 > JAVA' 카테고리의 다른 글
메소드 파라미터 배열 사용 이유 (0) | 2021.05.12 |
---|
최근댓글