| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- 씨샵
- 자바
- JPA
- 코딩테스트
- MySQL
- 1931번
- MVVM
- level3
- 스프링부트
- Java
- level2
- programmers
- 3일컷
- 운전면허
- SQL
- WSL
- Spring Boot
- Python
- 코테
- 쿼리
- springboot
- 백준
- 일반화
- WPF
- delegate
- 프로그래머스
- c#
- 보통2종
- level4
- 닫기버튼
- Today
- Total
욱꾸미의 주꾸미 발
[JAVA, HashMap] Key가 Class일때 containsKey사용하기 본문
안녕하세요.
오랜만에 인사드립니다. 요즘은 웹공부하랴, C#프로젝트하랴 정신이 없습니다ㅠㅠ
또 날씨가 추워지는게 연말이 왔음이 실감되네요.
제가 공부한 하나하나가 나중에 저에게 큰 자산이 되기를 바라며 오늘 글도 간단하게 남겨보겠습니다.
오늘은 HashMap의 key가 class면 containsKey를 어떻게 사용할까?
가 주제 입니다.
쉽게 하신분들도 계시겠지만 저는 나름 시간을 소모했기에😂😂 이렇게 남겨 다음에는 시간을 단축시켜야겠죠?
그럼 바로 시작하겠습니다.
KeyClass 정의
HashMap은 Key와 Value가 짝으로 이뤄졌습니다.
중복을 허용하지않고 순서가 없다는 특징이 있죠~
KeyClass는 간단한 예시를 위해 두 개의 String형태로 구성하겠습니다.
private String code;
private String regDt;
이렇게 두 개를 이용하도록 하죠~
다음은 둘을 비교하는 equals메서드를 오버라이드 하겠습니다.
KeyClass내 @Override를 통한 equals 재정의
이제 contiansKey에서 사용할 equals를 재정의하겠습니다.
해당 내용도 KeyClass 안에서 재정의 합니다.
@Override
public boolean equals(Object o)
{
if(this==o) return true;
if(o==null||getClass()!=o.getClass())return false;
KeyClass other=(KeyClass)o;
return other.code.equals(code)&&other.regDt.equals(regDt);
}
저 같은 경우에는 String형태 즉 code와 regDT가 같다면 같은 Key로 인식하도록 합니다.
equals의 재정의 부분입니다.
위에는 객체의 주소가 같은지 검사하는 부분으로 확인됩니다.
밑에 KeyClass other부분을 보시죠~
this.code, this.regDt와 other.code, other.regDt의 같이 같은 비교해 return합니다.
여기서 주의 할 점은 ==을 쓰지 않는다는 점입니다~
==은 주소값까지 비교하기에 같다고 처리를 못합니다 ㅠㅠㅠ 이걸로 고생좀 했습니다.
KeyClass내 @Override를 통한 hashCode 재정의
다음은 해쉬코드의 재정의 입니다.
해당부분은... 비교할 때 해쉬를 사용한다고 하는데 자세히는 모르겠네요 😂😂
더 알아봐야겠는 부분입니다.
해당 내용도 추가해주겠습니다.
@Override
public int hashCode() {
return Objects.hash(code, regDt);
}
이렇게 Objects.hash의 인자로 정의한 field를 넣어주면 되겠습니다.
그럼 KeyClass에 대한 종합 코드 입니다.
public class KeyClass{
private String code;
private String regDt;
@Override
public boolean equals(Object o)
{
if(this==o) return true;
if(o==null||getClass()!=o.getClass())return false;
KeyClass other=(KeyClass)o;
return other.code.equals(code)&&other.regDt.equals(regDt);
}
@Override
public int hashCode() {
return Objects.hash(code, regDt);
}
}
오늘은 이렇게 Custom 클래스의 equals 재정의에 대해 알아봤습니다.
참 어떻게 보면 간단한데 이걸 찾아서 적용한거보면 아직 제 기본기가 많이 부족하다고 느낍니다.
추운 날씨 감기조심하시고 🥶🥶🤧 오늘도 좋은 하루 보내시길 바랍니다.
감사합니다. 😍😍
'JAVA' 카테고리의 다른 글
| [JAVA, ModelMapper] Embedded Class의 특정 컬럼 매핑 시키기 (0) | 2023.09.21 |
|---|---|
| [JAVA, HashSet] HashSet의 중복체크 관련 글 (0) | 2022.12.13 |
| [SpringBoot] IntelliJ 한글깨짐 관련 (0) | 2022.08.27 |
| [JAVA, SpringBoot] 404 WhiteLabel에러 관련 글 (0) | 2022.08.22 |