Java学习笔记——容器之Set

   Set是元素不重复的集合,常用的Set有HashSet、LinkedHashSet、TreeSet、CopyOnWriteArraySet,本文将针对这几种Set做简单的介绍。


1.HashSet

  HashSet是按照数据的hashcode来决定存储位置的Set,内部一个HashMap的成员变量map,HashSet实际上是一个所有key对应的Value都是常量的HashMap,所有实现的Set接口的方法都是调用HashMap对应的相应方法。


2.LinkedHashSet

 LinkedHashSet是有顺序的HashSet,它继承自HashSet,唯一区别就是它的Map是LinkedHashMap,因为LinkedHashMap是有序的,所以它也是有序的了。


3.TreeSet

 TreeSet是有序的基于TreeMap实现的Set,因此它也必须满足TreeMap的限制条件,即要么TreeSet中的数据实现了Comparable接口,要么TreeSet在构造时必须有比较器comparator作为参赛。


4.CopyOnWriteArraySet

 CopyOnWriteArraySet是基于CopyOnWirteArrayList实现的,是线程安全的,在插入list之前,先判断数据在list是否存在,存在则插入否则不插入,从而从插入数据的结果来看是Set。需要注意的是CopyOnWriteArrayList每次新增数据时都会生成新的数组,因此应当使用批量数据插入AddAll来提升插入数据的性能,因此绝对禁止在循环中调用add方法。


  HashSet、LinkedHashSet、TreeSet都不是线程安全的,可以通过Colletions.synchronizedSet()方式封装成线程安全的Set。


你可能感兴趣的:(Java学习笔记——容器之Set)