hashCode를 재정의하라
- equals 비교에 사용하는 정보가 변경되지 않았다면 hashCode는 매번 같은 값을 리턴해야한다.
- 두 객체에 대한 equals가 같다면, hashCode의 값도 같아야한다.
- 두 객체에 대한 equals가 다르더라도, hashCode의 값은 같을 수 있지만 해시 테이블 성능을 고려해 다른 값을 리턴하는 것이 좋다.
해시맵 내부의 연결 리스트
- 내부 구현은 언제든지 바뀔 수 있다.
- 자바 8에서 해시 충돌시 성능 개선을 위해 내부적으로 동일한 버켓에 일정 개수 이상의 엔트리가 추가되면, 연결리스트 대신 이진트리를 사용하도록 바뀌었다.
- 연결 리스트에서 어떤 값을 찾는데 걸리는 시간은?
- 이진 트리에서 어떤 값을 찾는데 걸리는 시간은? > 레드블랙 트리 이진트리의 다른 형태로 8개 이상이면 이진트리로 바꿔준다.
스레드 안전
- 가장 안전한 방법은 여러 스레드간에 공유하는 데이터가 없는 것 !
- 공유하는 데이터가 있다면
- Synchronization
- ThreadLocal
- 불변 객체 사용
- Synchronized 데이터 사용
- Concurrent 데이터 사용
- …