HashSet-TreeSet源码

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();
}


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值