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)
浙公网安备 33010602011771号