以下内容基于jdk1.7.0_79源码;关于HashSet、LinkedHashSet、TreeSetSet接口的实现类,最大特点是不允许出现重复元素;HashSet:基于HashMap实现,一个性能相对较好的Set;LinkedHashSet:基于LinkedHashMap实现 ...
以下内容基于jdk1.7.0_79源码;
关于HashSet、LinkedHashSet、TreeSet
Set接口的实现类,最大特点是不允许出现重复元素;
HashSet:基于HashMap实现,一个性能相对较好的Set;
LinkedHashSet:基于LinkedHashMap实现,一个保存了插入顺序的Set;
TreeSet;基于TreeSet实现,一个实现了排序的Set;
类图关系
源码分析
Set接口的实现类相对来说都比较简单,如果熟悉HashMap、LinkedHashMap、TreeMap源码的话,HashSet、LinkedHashSet、TreeSet的代码会很好理解,因为基本上都是调用对应Map的方法来实现的;
HashSet部分源码:
package java.util;public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializable{ static final long serialVersionUID = -5024744406713321676L; //存储元素的HashMap private transient HashMap<E,Object> map; // 一个冗余的空对象,用于在Map中存放key对应的value,Map中所有的键值对的value都是同一个空Object的引用 private static final Object PRESENT = new Object(); /** * 构造方法,直接生成一个对应的HashMap */ public HashSet() { map = new HashMap<>(); } //省略一部分代码..... //返回HashMap的key迭代器,HashSet中的元素实际上就是HashMap中的key元素 public Iterator<E> iterator() { return map.keySet().iterator(); } //调用HashMap的put方法,将e-PRESENT键值对对象put到map中 public boolean add(E e) { return map.put(e, PRESENT)==null; } //省略一部分代码.....}
原标题:【JAVA集合】HashSet、LinkedHashSet、TreeSet
关键词:JAVA
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。