HashSet
HashSet源码底层的都是HashMap的方法实现的,在创建HashSet()对象的时候
就是在底层创建了一个HashMap<>();对象;
public HashSet() {
map = new HashMap<>();
}
在进行存放数据的时候是将数据存放到了key值的位置,保证了唯一性,而
value值统一都是创建了一个object()对象
private static final Object PRESENT = new Object();
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
在进行调用iterator()方法的时候,是先获取到map所有的key值,在进行iterator()
方法遍历
public Iterator<E> iterator() {
return map.keySet().iterator();
}
在进行使用contains方法的时候,查看是否包含某个元素,调用map的containsKey方法.
在getEntry()方法进行查找得到hash码,计算存储的位置,判断是否存在.
set.contains("Java");
public boolean contains(Object o) {
return map.containsKey(o);
}
public boolean containsKey(Object key) {
return getEntry(key) != null;
}
TreeSet
public class TreeSet<E> implements NavigableSet<E>,
Cloneable, java.io.Serializable
{
//TreeSet底层就是一个TreeMap
private transient NavigableMap<E,Object> m;
//创建一个Object()对象
private static final Object PRESENT = new Object();
//在进行创建TreeSet()对象的时候就是创建了一个TreeMap();
public TreeSet() {
this(new TreeMap<E,Object>());
}
TreeSet(NavigableMap<E,Object> m) {
this.m = m;
}
}
//在进行添加元素的时候就是调用创建TreeSet()对象的时候创建的TreeMap对象
key值存储传进来的值,value一直都是创建新的Object()对象
public boolean add(E e) {
return m.put(e, PRESENT)==null;
}
//获取元素的数量的话都是TreeMap对象中的size()方法
public int size() {
return m.size();
}
HashSet-TreeSet源码
最新推荐文章于 2021-05-22 19:15:44 发布