전체 글(89)
-
HashSet - 직접 구현하는 Set4 - 제네릭과 인터페이스 도입
package collection.set;import java.util.Arrays;import java.util.LinkedList;public class MyHashSetV3 implements MySet { static final int DEFAULT_INITIAL_CAPACITY = 16; private LinkedList[] buckets; private int size = 0; private int capacity = DEFAULT_INITIAL_CAPACITY; public MyHashSetV3() { initBuckets(); } public MyHashSetV3(int capacity) { this.capacity = capa..
2024.06.13 -
equals, hashCode의 중요성2
hashCode는 구현했지만 equals를 구현하지 않은 경우package collection.set.member;import java.util.Objects;public class MemberOnlyHash { private String id; public String getId() { return id; } public MemberOnlyHash(String id) { this.id = id; } @Override public int hashCode() { return Objects.hash(id); }}Objects.hash(id)를 사용해서 id를 기준으로 해시 코드를 생성했다.package collection.set..
2024.06.13 -
equals, hashCode의 중요성 1
해시 자료 구조를 사용하려면 hashCode()도 중요하지만, 해시 인덱스가 충돌할 경우를 대비해서 equals()도 반드시 재정의해야 한다. 해시 인덱스가 충돌할 경우 같은 해시 인덱스에 있는 데이터들을 하나하나 비교해서 찾아야한다. 이때 equals()를 사용해서 비교한다. 참고해시 인덱스가 같아도 실제 저장된 데이터는 다를 수 있다. 따라서 특정 인덱스에 데이터가 하나만 있어도 equals()로 찾는 데이터가 맞는지 검증해야 한다.앞의 예에서 "hi"라는 회원과 "JPA"라는 회원의 해시 인덱스는 둘다 0으로 같다.만약 "hi"라는 회원만 저장했다고 가정하자, 이렇게 되면 0번 인덱스에는 하나의 데이터만 보관되어 있다. 이때 "JPA"라는 회원을 찾는다면 같은 0번 인덱스에서 찾는다. 이때 equa..
2024.06.13 -
HashSet - 직접 구현하는 Set3 - 직접 만든 객체 보관
직접 만든 객체를 Set에 보관MyHashSetV2는 Object를 받을 수 있다 .따라서 직접 만든 Member와 같은 객체도 보관할 수 있다.여기서 주의할 점은 직접 만든 객체가 hashCode(), equals() 두 메서드를 반드시 구현해야 한다는 점이다. package collection.set;import collection.set.member.Member;public class MyHashSetV2Main2 { public static void main(String[] args) { MyHashSetV2 set = new MyHashSetV2(10); Member hi = new Member("hi"); Member JPA = new Member("..
2024.06.12 -
HashSet - 직접 구현하는 Set2 - MyHashSetV2
MyHashSetV1은 Integer 숫자만 저장할 수 있었다. 여기서는 모든 타입을 저장할 수 있는 Set을 만들어보자.자바의 hashCode()를 사용하면 타입과 관계없이 해시 코드를 편리하게 구할 수 있다.package collection.set;import java.util.Arrays;import java.util.LinkedList;public class MyHashSetV2 { static final int DEFAULT_INITIAL_CAPACITY = 16; private LinkedList[] buckets; private int size = 0; private int capacity = DEFAULT_INITIAL_CAPACITY; public MyHashS..
2024.06.12 -
HashSet - 자바의 hashCode()
해시 인덱스를 사용하는 해시 자료 구조는 데이터 추가, 검색, 삭제의 성능이 O(1)로 매우 빠르다. 따라서 많은 곳에서 자주 사용된다. 그런데 앞서 학습한 것 처럼 해시 자료 구조를 사용하려면 정수로 된 숫자 값인 해시 코드가 필요하다. 자바에는 정수 int, Integer 뿐만 아니라 char, String, Double, Boolean등 수많은 다팁이 있다. 뿌난 아니라 개발자가 직접 정의한 Member, User와 같은 사용자 정의 타입도 있다.이 모든 타입을 해시 자료 구조에 저장하려면 모든 객체가 숫자 해시 코드를 제공할 수 있어야 한다. Object.hashCode()public class Object{ public int hashCode();}이 메서드를 그대로 사용하기 보다는 보통 재정의..
2024.06.11