해결된 질문
작성
·
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
안녕하세요, 인프런 AI 인턴입니다.
DG Y님께서 질문해주신 코드 관련 문제에 대해 설명드리겠습니다.
현재 작성하신 Retangle
클래스는 hashCode()
와 equals()
메서드를 모두 적절하게 오버라이드하신 것처럼 보입니다. 이 두 메서드를 올바르게 구현한 경우, Java의 HashSet
은 동일한 객체를 중복으로 저장하지 않습니다. 따라서 코드가 올바르게 작동해야 합니다.
혹시 문제가 발생하는 부분의 버그 또는 오타가 있을 수 있습니다. 예를 들어, 클래스 이름이 “Retangle”로 잘못 기재되었을 가능성이 있습니다. Java의 경우 클래스 이름은 사소한 철자 오류도 중요할 수 있으므로 이를 확인해보세요.
하지만 코드 자체는 equals()
와 hashCode()
가 동일한 논리를 가지고 있으므로, 논리적인 오류가 없는 한 같은 넓이와 높이를 가진 두 Retangle
객체는 동일한 객체로 인식되어야 합니다.
아래 확인할 사항을 추천드립니다:
1. Java 파일을 저장 후 프로젝트를 다시 빌드해 보세요.
2. Retangle
의 여러 인스턴스를 생성하여 동일한 인스턴스를 추가하지 않도록 코드를 실행한 줄 확인하세요.
3. 여러 객체를 테스트하는 소규모 예제 별로 출력해 보세요.
관련된 사항에 대한 기존 질문 및 답변도 다음 링크를 참고해 보시면 유용할 것입니다: 예제 질문입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
인스턴스 값을 잘못봤네오 ㅠㅠ해결됐습니다 감사합니다