part_1.jpg
226.3 KB
#N705. Design HashSet
problem link
#solution
problem link
#solution
class MyHashSet {
List<Integer>[] container = null;
int cap = 1000;
double loadFactor = 0.75;
int count = 0;
public MyHashSet() {
container = new LinkedList[cap];
}
public void add(int key) {
if(contains(key)) return;
if(loadFactor*cap == count){
count = 0;
//rehash
cap *= 2;
List<Integer>[] oldC = container;
container = new LinkedList[cap];
for(int i=0; i < oldC.length; i++){
List<Integer> list = oldC[i];
if(list != null){
for(int entry : list)
this.add(entry);
}
}
}
int hash = key % cap;
if(container[hash] == null)
container[hash] = new LinkedList<>();
container[hash].add(key);
++count;
}part_2.jpg
182 KB
public void remove(int key) {
int hash = key % cap;
List<Integer> list = container[hash];
if(list != null){
Iterator<Integer> itr = list.iterator();
while(itr.hasNext())
if(itr.next() == key){
itr.remove();
--count;
break;
}
}
}
public boolean contains(int key) {
int hash = key % cap;
List<Integer> list = container[hash];
if(list != null){
Iterator<Integer> itr = list.iterator();
while(itr.hasNext())
if(itr.next() == key)
return true;
}
return false;
}
}👍2