HashSet的底层原理:
底层实际上就是一个HashMap,哈希表的每一个entry对象的key是HashSet的每一个元素,value统一都是new Object()
定义Set接口
public interface Set {
public int size();
public void add(Object obj);
public boolean isEmpty();
public boolean contains(Object obj);
}
实现Set接口
/**
* 实现Set接口
*/
public class HashSet implements Set {
private transient HashMap map;//底层有一个HashMap的引用,指向一个哈希表
private static final Object PRESENT = new Object();//Set中向map中存放键值对,value统一的是PRESENT
public HashSet(){
map=new HashMap();
}
@Override
public int size() {
return map.size();
}
@Override
public void add(Object obj) {
map.put(obj,PRESENT);
}
@Override
public boolean isEmpty() {
return map.size()==0;
}
@Override
public boolean contains(Object obj) {
return map.get(obj) !=null;
}
}
因为他的底层是一个HashMap所以他的所有方法都是依赖HashMap来实现的,这里直接调用HashMap就可以了
测试类
public class TestHashSet {
public static void main(String[] args) {
Set set = new HashSet();
set.add("HTML");
set.add("Java");
set.add("MySQL");
set.add("Java");
System.out.println(set.size());
System.out.println(set.toString());
System.out.println(set.contains("HTML"));
}
}