Set相关

Set和List 的区别

  Set 和 List 都是继承自Collection接口

  List 特点:元素有放入顺序,元素可重复

  Set 特点:元素无放入顺序,元素不可重复,重复元素会覆盖掉(元素虽然无放入顺序,但是元素在Set中的位置室友钙元素的HashCode决定的,其位置其实是固定的,加入Set的Object必须定义equals() 方法,另外List支持for循环,也就是通过下标来遍历,也可以用迭代器,但是Set只能用迭代,因为它序,无法用下标来取得想要的值)

  对比:Set,检索元素效率低下,删除和插入效率高,插入和删除元素不会引起元素位置改变。List,和数组类似,List可以动态增长,查找元素效率高,插入和删除元素效率低,因为会引起其他元素位置改变

 

HashSet 是如何保证不重复的

  向HashSet中add() 元素时,判断元素是否存在的依据,不仅仅要比较hash值,同时还要结合equals方法比较。HashSet中的add() 方法会使用HashMap 的 add()方法

public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable
{
    private transient HashMap<E,Object> map;
    private static final Object PRESENT = new Object();

    public boolean add(E e) {
        return map.put(e, PRESENT)==null;
    }
}

  HashMap的Key是唯一的,由上面的代码可以看出 HashSet 添加进去的值就是做HashMap的Key。所以不会重复(HashMap 比较key是否相等实现比较hashcode,再比较equals)

posted on 2020-08-12 14:49  未知不知  阅读(101)  评论(0)    收藏  举报