HashSet - 직접 구현하는 Set4 - 제네릭과 인터페이스 도입
2024. 6. 13. 15:13ㆍ카테고리 없음
package collection.set;
import java.util.Arrays;
import java.util.LinkedList;
public class MyHashSetV3<E> implements MySet<E> {
static final int DEFAULT_INITIAL_CAPACITY = 16;
private LinkedList<E>[] buckets;
private int size = 0;
private int capacity = DEFAULT_INITIAL_CAPACITY;
public MyHashSetV3() {
initBuckets();
}
public MyHashSetV3(int capacity) {
this.capacity = capacity;
initBuckets();
}
private void initBuckets() {
buckets = new LinkedList[capacity];
for (int i = 0; i < capacity; i++) {
buckets[i] = new LinkedList<>();
}
}
private int hashIndex(E value){
int hashCode = value.hashCode();
return Math.abs(hashCode) % capacity; //-를 없앰, 절대값
}
public boolean add(E value){
int hashIndex = hashIndex(value);
LinkedList<E> bucket = buckets[hashIndex];
if(bucket.contains(value)){
return false;
}
bucket.add(value);
size++;
return true;
}
public boolean contains(E searchValue){
int hashIndex = hashIndex(searchValue);
LinkedList<E> bucket = buckets[hashIndex];
return bucket.contains(searchValue);
}
public boolean remove(E value){
int hashIndex = hashIndex(value);
LinkedList<E> bucket = buckets[hashIndex];
boolean result = bucket.remove(value);
if(result){
size--;
return true;
}else{
return false;
}
}
public int getSize() {
return size;
}
@Override
public String toString() {
return "MyHashSetV3{" +
"buckets=" + Arrays.toString(buckets) +
", size=" + size +
", capacity=" + capacity +
'}';
}
}
package collection.set;
public class MyHashSetV3Main {
public static void main(String[] args) {
MySet<String> set = new MyHashSetV3<>(10);
set.add("A");
set.add("B");
set.add("C");
System.out.println(set);
//검색
String searchValue = "A";
boolean result = set.contains(searchValue);
System.out.println("set.contains(" + searchValue +")" + result);
}
}
실행 결과
MyHashSetV3{buckets=[[], [], [], [], [], [A], [B], [C], [], []], size=3, capacity=10}
set.contains(A)true