Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[Java] Set 중복체크, hashCode와 equals 본문
Set 중복체크
hashCode() 리턴값이 같으면 equals()를 호출해서
true이면 같은 객체, false이면 다른 객체로 인식
[Member.java]
public class Member {
private String name;
private int age;
private String addr;
public Member() {}
public Member(String name, int age, String addr) {
this.name = name;
this.age = age;
this.addr = addr;
}
public String getName() {
return name;
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Member) {
Member m = (Member)obj;
if(name.equals(m.getName()) {
return true;
}
}
return false;
}
if (vehicle instanceof Bus)
: Vehicle 인터페이스 변수에 대입된 객체가 Bus일 경우
: Vehicle 인터페이스 변수에 대입된 객체가 Bus일 경우
WHY
hasCode에서 리턴값을 한번 비교한 것을 왜 equals에서 문자열 자체를 비교할까?
이름이 같으면(문자열이 같으면) 해당 HashCode는 같다.
다만, 가끔은 문자열이 달라도 HashCode가 같을 수 있다.
따라서, hashCode()의 반환값이 같더라도, 문자열 자체를 비교해줌으로서
객체의 같음의 기준(위의 코드에서는 name)을 정확하게 확인한다.
[MemberSetExam.java]
public class MemberSetExam {
private Set<Member> set = new HashSet<>();
public MemberSetExam() {
set.add(new Member("홍길동", 10, "서울"));
set.add(new Member("홍길동", 30, "인천"));
set.add(new Member("이몽룡", 24, "광주"));
System.out.println("저장된 객체의 개수: " + set.size()); // 2
}
public static void main(String[] args) {
new MemberSetExam();
}
}
💡 해당 객체의 같음의 기준은 name이다
'Backend > 자바' 카테고리의 다른 글
[Java] 종합보험 예외처리 (0) | 2023.04.18 |
---|---|
[Java] Inner Class와 접근 가능한 자원 (2) | 2023.04.17 |
[Java] 객체지향언어 Java (0) | 2023.04.17 |
[Java] 인터페이스와 구현객체, Collections (0) | 2023.04.09 |
[Java] 기타제한자 static / final / abstract (0) | 2023.04.08 |
Comments