인프런 커뮤니티 질문&답변

인프린님의 프로필 이미지
인프린

작성한 질문수

김영한의 실전 자바 - 중급 2편

정렬2 - Comparable, Comparator

comparable 질문

작성

·

193

0

안녕하세요.

강의에서 다음의 코드를 비교한 걸 보여주셨을 때 콘솔에 출력되는 개수가 다른데 왜 그런걸까요 ? 자바 버전에 따라 내부 구현된 정렬 알고리즘이 달라서 그럴까요 ? (강의는 출력 2개)

@Override
public int compareTo(MyUser o) {
    System.out.println(this + "vs " + o);
    return this.age < o.age ? -1 : (this.age == o.age ? 0 : 1);
}

MyUser{id='B', age=10}vs MyUser{id='A', age=30}

MyUser{id='C', age=20}vs MyUser{id='B', age=10}

MyUser{id='C', age=20}vs MyUser{id='A', age=30}

MyUser{id='C', age=20}vs MyUser{id='B', age=10}

답변 2

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 인프린님

도움을 드리고 싶지만 질문 내용만으로는 답변을 드리기 어렵습니다.

우선 제공해드린 소스코드와 본인이 작성한 코드가 먼저 비교해주세요.

그래도 문제가 없다면

실제 동작하는 전체 프로젝트를 ZIP파일로 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.

구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

 

주의: 업로드시 링크에 있는 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 문제 영역을 실행할 수 있는 방법

2. 문제가 어떻게 나타나는지에 대한 상세한 설명

링크: 공식 서포터즈

링크: 자주하는 질문

감사합니다.

0

안녕하세요, 인프런 AI 인턴입니다.

님의 질문에 대한 답변은 직접적인 정보 자료에 나와 있는 내용은 아니지만, 자바 언어와 관련된 일반적인 지식을 바탕으로 답변드리겠습니다.

자바에서 compareTo를 사용하여 객체를 비교할 때 콘솔에 출력되는 개수가 다른 이유는 정말로 자바 버전마다 사용하는 정렬 알고리즘이 다를 수 있기 때문입니다. 대표적으로 자바 7 이전과 이후에는 Arrays.sort 메서드의 구현에 따라 정렬 알고리즘이 바뀌었습니다. 자바 7 이전에는 멀티 피봇 퀵소트가 아닌 머지소트 또는 이와 유사한 알고리즘을 사용하여 정렬했으며, 자바 7부터는 듀얼 피봇 퀵소트 알고리즘을 사용하고 있습니다.

이로 인해 같은 데이터 집합에 대해서도 자바 버전에 따라 정렬 과정 중 비교가 이루어지는 횟수나 순서가 달라질 수 있습니다. 공식 문서나 자바의 Arrays.sort와 관련된 부분을 참고하면 자세한 내용을 알 수 있을 것입니다.

정렬 알고리즘이나 compareTo 메소드의 작동 방식에 따른 출력 횟수 차이는 의도적으로 설계된 결과일 수 있으며, 각각의 정렬 알고리즘이 데이터의 분포나 상태에 따라 다르게 동작하기 때문에 발생합니다. 따라서, 강의에서 보여진 출력 개수와 실제 테스트 환경에서의 출력 개수가 다를 수 있는 것은 자바 버전에 따른 내부 정렬 알고리즘의 차이 때문일 가능성이 높습니다.

인프린님의 프로필 이미지
인프린

작성한 질문수

질문하기