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

DG Y님의 프로필 이미지
DG Y

작성한 질문수

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

문제와 풀이2

코드오류 질문

해결된 질문

작성

·

56

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

 


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예/아니오)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)

[질문 내용]
여기에 질문 내용을 남겨주세요.

package collection.set.test; 의 RetangleTest 클래스에 관한 질문입니다

package collection.set.test;

import java.util.HashSet;

import java.util.Set;

public class RetangleTest {

public static void main(String[] args) {

Set<Retangle> retangleSet = new HashSet<>();

retangleSet.add(new Retangle(10,20));

retangleSet.add(new Retangle(20,10));

retangleSet.add(new Retangle(30,30));

for (Retangle retangle : retangleSet) {

System.out.println(retangle);

}

}

}

중복된 값은 출력하지않아야하는데

예시코드를 돌려보아도 중복된값을 출력하고있는 문제가있습니다

package collection.set.test;

import java.util.Objects;

public class Retangle {

private int width;

private int height;

public Retangle(int width, int height) {

this.width = width;

this.height = height;

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

Retangle retangle = (Retangle) o;

return width == retangle.width && height == retangle.height;

}

@Override

public int hashCode() {

return Objects.hash(width, height);

}

@Override

public String toString() {

return "Retangle{" +

"width=" + width +

", height=" + height +

'}';

}

}

이거는 Retangle 클래스입니다

hashCode , eqauls를 오버라이딩했는데도 중복출력이되네요

 

 

답변 2

0

안녕하세요. DG Y님, 공식 서포터즈 y2gcoder입니다.

제가 질문을 이해하지 못한 것 같습니다.

image.png

 

 

저는 예시 코드로 돌렸을 때 중복이 잘 걸러진 결과가 나오고 있습니다 🙂

그리고 질문 본문에 적어주신 RectangleTest 코드에서는 중복으로 걸러질만한 Rectangle 객체가 없을 것 같습니다!

 

감사합니다.

DG Y님의 프로필 이미지
DG Y
질문자

인스턴스 값을 잘못봤네오 ㅠㅠ해결됐습니다 감사합니다

0

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

DG Y님께서 질문해주신 코드 관련 문제에 대해 설명드리겠습니다.

현재 작성하신 Retangle 클래스는 hashCode()equals() 메서드를 모두 적절하게 오버라이드하신 것처럼 보입니다. 이 두 메서드를 올바르게 구현한 경우, Java의 HashSet은 동일한 객체를 중복으로 저장하지 않습니다. 따라서 코드가 올바르게 작동해야 합니다.

혹시 문제가 발생하는 부분의 버그 또는 오타가 있을 수 있습니다. 예를 들어, 클래스 이름이 “Retangle”로 잘못 기재되었을 가능성이 있습니다. Java의 경우 클래스 이름은 사소한 철자 오류도 중요할 수 있으므로 이를 확인해보세요.

하지만 코드 자체는 equals()hashCode()가 동일한 논리를 가지고 있으므로, 논리적인 오류가 없는 한 같은 넓이와 높이를 가진 두 Retangle 객체는 동일한 객체로 인식되어야 합니다.

아래 확인할 사항을 추천드립니다:
1. Java 파일을 저장 후 프로젝트를 다시 빌드해 보세요.
2. Retangle의 여러 인스턴스를 생성하여 동일한 인스턴스를 추가하지 않도록 코드를 실행한 줄 확인하세요.
3. 여러 객체를 테스트하는 소규모 예제 별로 출력해 보세요.

관련된 사항에 대한 기존 질문 및 답변도 다음 링크를 참고해 보시면 유용할 것입니다: 예제 질문입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

DG Y님의 프로필 이미지
DG Y

작성한 질문수

질문하기