반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- collection python
- 스프링 시스템 구조
- 리트허브 커밋
- 프로그래머스 배열의 유사도 파이썬
- leftJoin
- 가위바위보 풀이
- BigO notation
- 파이썬 특정 문자 제거하기
- 프로그래머스 가위바위보 풀이
- programmers 배열 회전
- 파이썬 컬렉션
- 춥고더운우리집
- 프레젠테이션 레이어
- 개발자 취준
- 슈츠 자막
- 주니어개발자
- 프로그래머스
- 배열의 유사도 파이썬
- 비지니스 레이어
- 2-layered architecture
- 춥고 더운 우리 집
- 리트허브 오류
- 프로그래머스 가위바위보
- 알고리즘
- Programmers 배열의 유사도
- 리트허브 사용법
- 특정문자 제거하기
- 프로그래머스 배열 회전시키기
- 공선옥
- 프로그래머스 특정 문자 제거하기
Archives
- Today
- Total
기억보다 기록을
[Effective JAVA] 이펙티브 자바 item11.equals를 재정의하려거든 hashCode도 재정의하라 본문
Language/JAVA
[Effective JAVA] 이펙티브 자바 item11.equals를 재정의하려거든 hashCode도 재정의하라
juyeong 2023. 1. 15. 22:57반응형
[Item 11] equals를 재정의하려거든 hashCode도 재정의하라
- equals를 구현할 때 hashCode도 함께 만들어야한다. 롬복은 @EqualsAndHashCode 하나의 어노테이션으로 동작한다.
hashCode 규약
- equals에 사용되는 정보가 변경되지 않았다면 hashCode는 매번 같은 값을 리턴해야한다.
(변경되거나, 애플리케이션을 다시 실행했다면 달라질 수 있다.)
- 객체에 대한 equals가 같다면, hashCode의 값도 같아야한다.
- 두 객체의 equals가 다르더라도 hashCode의 값을 같을 수 있지만 해시테이블 성능을 고려해 다른 값을 리턴하는 것이 좋다.
```
@Override public int hashCode() {
int result = Short.hashCode(areaCode);
result = 31 * result + Short.hashCode(prefix);
result = 31 * result + Short.hashCode(lineNum);
return result;
}
```
- 해시충돌 Hash collision:
* 서로 다른 key들이 같은 hash를 가질 때 발생
* key1 != key2 but hf(key1) == hf(key2)
- 해시코드 구현에 비용이 많이 든다고 판단되면 캐싱하여 사용해도 된다.
```
private int hashcode;
```
- Thread Safety
* 멀티스레드 환경에서 Thread Safety이란 , 여러개의 스레드가 해당 코드를 동작할 때 예측한대로 동작하는 것.
* 해시코드 구현 시 여러개의 스레드가 동시에 작업한다면, 한 객체의 값을 엇갈리며 계산하여 다른 값이 나올 수 있다.
* 따라서 캐싱할때는 Thread safety를 고려해야한다.
반응형
'Language > JAVA' 카테고리의 다른 글
[Effective JAVA] 이펙티브 자바 item12.toString을 항상 재정의하라 (0) | 2023.01.15 |
---|---|
[Effective JAVA] 이펙티브 자바 item10.equals는 일반 규약을 지켜 재정의하라 (0) | 2023.01.15 |
[JAVA] 자료구조_클래스, 객체, 참조변수 (1) (0) | 2022.07.02 |
[JAVA] 메소드 호출과 프로그램의 기능적 분할-call by reference, call by value, actual prameter, formal parameter (0) | 2022.06.06 |
[JAVA] n개의 연속된 숫자 나열을 정수로 환산하여 소수인지 판별 후 최대값 구하는 프로그램 (0) | 2022.03.05 |