你的位置:首页 > 软件开发 > Java > 【JAVA集合】HashSet、LinkedHashSet、TreeSet

【JAVA集合】HashSet、LinkedHashSet、TreeSet

发布时间:2016-03-20 13:00:08
以下内容基于jdk1.7.0_79源码;关于HashSet、LinkedHashSet、TreeSetSet接口的实现类,最大特点是不允许出现重复元素;HashSet:基于HashMap实现,一个性能相对较好的Set;LinkedHashSet:基于LinkedHashMap实现 ...

【JAVA集合】HashSet、LinkedHashSet、TreeSet

以下内容基于jdk1.7.0_79源码;

关于HashSet、LinkedHashSet、TreeSet

Set接口的实现类,最大特点是不允许出现重复元素;

HashSet:基于HashMap实现,一个性能相对较好的Set;

LinkedHashSet:基于LinkedHashMap实现,一个保存了插入顺序的Set;

TreeSet;基于TreeSet实现,一个实现了排序的Set;

类图关系

【JAVA集合】HashSet、LinkedHashSet、TreeSet

源码分析

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 (#换成@)。