Java 3

Collections.synchronizedMap(hashMap) 과 ConcurrentHashMap 의 차이

먼저 각각에 대해 설명해보자. 1. Collections.synchronizedMap 기존 Map 객체를 감싸는 팩토리 메소드이다. Collections 의 내부 클래스 중 하나인 SynchronizedMap 을 반환한다. 이 클래스는 mutex 라는 이름으로 선언된 객체의 락을 사용하여 모든 연산을 동기화 해준다. 여러 스레드에서 접근해도 연산이 정상 동작함을 보장한다. 기존 Map 객체는 동기화를 지원하지 않으므로, 이 메소드로 한번 감싸면 동기화 컬렉션이 된다. 2. ConcurrentHashMap java.util.concurrent 패키지에 포함된 병렬 컬렉션 중 하나이다. Map 인터페이스의 구현체이며, Collections.synchronizedMap 와 마찬가지로 여러 스레드에서 접근해도 ..

Java 2022.10.23

java의 HashMap 해시 충돌 해결

먼저 기본적으로 자료구조 시간에 배우는 해시 충돌의 해결법 두 가지를 알아보자. 1. 체이닝 (Separate Chaining) 충돌이 발생하면 키에 해당하는 데이터들을 LinkedList 형태로 연결하는 방식이다. 2. 개방 주소법 (Open Addressing) 충돌이 발생하면 다음 칸 또는 제곱만큼 건너뛴 칸 또는 다른 해시를 한 번 더 적용한 칸에 저장하는 방식이다. 그럼 자바의 HashMap은 해시 충돌이 발생할 경우 어떻게 해결할까? HashMap은 체이닝 기법을 사용한다. 체이닝 기법은 개방 주소법보다 remove 면에서 유리하다. 또한 개방 주소법은 데이터의 밀도가 높아질수록 검색에 오랜 시간이 걸리게 될 것이므로 결국 체이닝 기법보다 불리하다. 자바 8 이전에는 체이닝을 할 때 무조건 L..

Java 2022.01.03

Object 객체의 equals와 hashCode

모든 객체의 조상, Object 에 대해 알아보자. Object 는 크게 두 개의 메서드를 가진다. equals와 hashcode이다. 먼저 equals는 파라미터로 들어오는 객체와 '동일한 객체인지' 비교해서 boolean을 반환한다. public boolean equals(Object obj) { return (this == obj); } 즉 동일한 레퍼런스를 참조하는 진짜로 똑같은 객체일 때만 true 다. hashCode 함수는 객체의 해시값을 반환하는 함수이다. 해시라는 단어만 들어도 알 수 있듯, 객체마다 모두 다른 값을 반환해준다. public native int hashCode(); 오잉? 이 메서드는 구현부가 없고 native라는 특이한 키워드를 가지고 있다. native 란 자바가 아닌..

Java 2022.01.03