jdk源码分析——Collection 集合

jdk源码分析——Collection 集合



Collection——java.util.Collection



not recommended 不建议使用

- Enumeration                 迭代器,被Iterable取代
  - StringTokenizer           字符分割器,建议用split和regex代替
- Vector                      线程安全的列表,建议用ArrayList代替
  - Stack                     线程安全的栈,建议用LinkedList或ArrayDeque代替
- Dictionary                  字典,被Map接口取代
  - HashTable                 线程安全的map,建议用HashMap代替


interfaces 接口

 - Iterable                   可拥有迭代器功能,支持foreach语法
   - Collection               集合超类,有add,remove等方法
     - List                   允许重复数据的表,新添了get,set,indexof,subList等方法
     - Queue                  先进先出或先进后出的队列,新添了offer,poll,peek等方法
       - Deque                双端队列,新添了addFirst,addLast,removeFirst,removeLast等方法
     - Set                    不允许重复数据的无序表,没有新添方法
       - SortedSet            排好序的set结构,新添了comparator,first,last,subSet等方法
         - NavigableSet       用于元素最近匹配查找的set结构,新添了lower,floor,ceiling,higher,pollFirest,pollLast等方法
 - Map                        关联容器,键不允许重复,包含Entry接口,对应每个键值对实体
    - SortedMap               排好序的map结构,新添了comparator,firstkey,lastkey,subMap等方法
    - NavigableMap            用于元素最近匹配查找的map结构,新添了lowerEntry,floorEntry,ceilingEntry,higherEntry,pollFirestEntry,pollLastEntry等方法
 - Serializable               可序列化,调用对象的writeObject和readObject实现序列化和反序列化
 - Cloneable                  可复制,需重写Object的clone方法
 - RandomAccess               可下标快速随机访问,一般为底层以数组实现的集合使用,使用get,set等方法快速索引访问
 - Comparable                 可比较,参与集合sort方法使用的对象应实现该方法
 - Comparator                 比较器,集合sort方法可带入该接口的实现
 - Iterator                   迭代器,只有hasNext,next,remove三个方法
 - ListIterator               列表迭代器,增加了set,add,previous,previousIndex等方法


default abstract implements 默认抽象实现
        

 - AbstractCollection          抽象集合,继承于Collection,add实现为抛出异常,remove实现为通过迭代器删除,剩余iterator迭代器生成和size方法没有实现
   - AbstractQueue             抽象队列,实现了Queue接口,将add,remove,element等方法转向offer,poll,peek,出错则抛出异常,而offer等方法没有实现
   - AbstractList              抽象有序表,实现了List接口,set,add,remove实现为抛出异常,get没有实现,iterator返回的迭代器和subList返回的子表执行任何方法都会检查线程同步异常,通过比较原表和子表的modCount是否相同确定
     - AbstractSequentialList  抽象迭代器表,将set,get,add,remove实现为通过listIterator迭代器迭代寻找,无法随机访问,而listIterator没有实现
   - AbstractSet               抽象无序表,实现了Set接口,没有什么实现
   - AbstractMap               抽象关联容器,实现了Map接口,所有操作实现为通过entrySet方法,而entrySet没有实现,put方法实现为抛出异常,keySet和values实现为单例对象,还定义了实现了Entry的可修改和不可修改的两种entry

collection implements 具体实现

 - PriorityQueue               优先级队列,继承于AbstractQueue,使用基于数组的最小堆实现,其迭代器不会产生有序输出,而是将原数组输出
 - AsLIFOQueue                 栈,继承于AbstractQueue,来自Collections的asLifoQueue方法产生,将add,remove都实现为addFirst,removeFirst
 - ArrayDeque                  双端队列,继承于AbstractCollection,实现了Deque接口,基于循环数组实现,有自扩张功能,提供正常和反序两种迭代器
 - ArrayList                   有序列表,继承于AbstractList,实现了List,RandomAccess接口,基于数组实现,有自扩张功能,将add,remove等都正常实现,迭代器会检查线程同步异常
 - LinkedList                  有序链表,继承于AbstractSequentialList,实现了List,Deque接口,基于双向链表实现,可用于栈或队列,提供正常和反序两种迭代器
 - HashSet                     无序散列表,继承于AbstractSet,实现了Set接口,基于值为桩的HashMap实现,提供了一个三参数的包权限构造器,创建LinkedHashMap
   - LinkedHashSet             有序散列表,继承于HashSet,通过超类的构造器构建LinkedHashMap实现
 - TreeSet                     排序散列表,继承于AbstractSet,实现NavigableSet接口,基于值为桩的TreeMap实现
 - EnumSet                     枚举排序表,继承于AbstractSet,其存放有序的枚举数据,基于位实现,相当高效,使用了序列化代理,参见See Effective Java第78条.
   - JumboEnumSet              少于等于64位的枚举set实现
   - RegularEnumSet            多于64位的枚举set实现
 - HashMap                     无序散列关联容器,继承于AbstractMap,实现Map接口,基于分离链接法的散列函数实现,散列值来自key对象的hashCode方法,冲突时jdk1.8前使用链表,后大于8个使用红黑树,时复降到lg(n),key对象最好实现Comparable方法,有自扩张功能,迭代器会检查线程同步异常
   - LinkedHashMap             有序散列关联容器,基于链表记录入表的顺序,其accessOrder属性为true时可以记录操作的entry使其排至链尾,覆盖removeEldestEntry方法返回大小的限制,可删除超过该大小之前加入的entry,迭代器会检查线程同步异常
 - TreeMap                     排序关联容器,继承于AbstractMap,实现NavigableMap接口,基于二叉搜索的红黑树,提供正序、反序的迭代器,会检查线程同步异常
 - EnumMap                     枚举关联容器,继承于AbstractMap,key按原枚举的顺序,不会出现key冲突,基于数组实现
 - WeakHashMap                 弱引用散列关联容器,继承于AbstractMap,与HashMap基本类似,但会自动删除无用引用的数据
 - IdentityHashMap             唯一标示散列关联容器,继承于AbstractMap,基于开放定址法的线性探测的散列函数实现,冲突时跳跃位为3,5,7等奇数位,key只有引用相同才相等,而hash值完全源于系统对象的hashcode,有自扩张功能,迭代器会检查线程同步异常


Arrays——java.util.Arrays 数组工具类



normal operation 通常操作
      

 - asList                       将数组转为不可修改列表
 - fill                         用元素填充
 - hashCode                     32进制计算散列值
 - copyOf                       复制


search and sort 查找和排序
      

 - binarySearch                 二分查找
 - sort                         基本类型使用双轴快速排序,对象默认使用TimSort,可修改jvm参数启用归并排序


Collections——java.util.Collections 集合工具类


normal operation 通常操作
      

 - addAll                       添加所有
 - binarySearch                 二分查找,小于 BINARYSEARCH_THRESHOLD = 5000 或实现了RandomAccess接口使用下标快速二分定位,否则使用迭代器定位
 - copy                         复制,小于 COPY_THRESHOLD = 10 或实现了RandomAccess接口使用下标快速set/get,否则使用迭代器
 - disjoint                     是否相交
 - eq                           是否相同
 - fill                         用元素填充,小于 FILL_THRESHOLD = 25 或实现了RandomAccess接口使用下标快速set,否则使用迭代器
 - frequency                    包含元素的数量
 - indexOfSubList               包含子列表的起始序号,小于 INDEXOFSUBLIST_THRESHOLD = 35 或实现了RandomAccess接口使用下标快速eq对比,否则使用迭代器
 - max                          最大值
 - min                          最小值
 - nCopies                      新建填充单一元素的列表
 - replaceAll                   替换,小于 REPLACEALL_THRESHOLD = 11 或实现了RandomAccess接口使用下标快速replace,否则使用迭代器
 - reverse                      反向,小于 REVERSE_THRESHOLD = 18 或实现了RandomAccess接口使用下标快速swap,否则使用迭代器
 - reverseOrder                 获取反向的Comparator比较器
 - rotate                       旋转,整体移动,小于 ROTATE_THRESHOLD = 100 或实现了RandomAccess接口使用下标快速swap,否则使用逆转
 - shuffle                      打乱顺序,小于 SHUFFLE_THRESHOLD = 5 或实现了RandomAccess接口使用下标快速swap,否则使用迭代器
 - swap                         互换
 - sort                         排序


collections types 集合类型
        

 - checked                      增加了类型检查的集合
 - empty                        空集,用于防止null影响集合判空
 - singleton                    单例,只有一个元素的集合
 - synchronized                 线程同步的集合,方法全部加上Synchronized
 - unmodifiable                 不可修改的集合,add、remove都报UnsupportedOperationException


concurrent——java.util.concurrent


interfaces
abstract implements
concurrent implements
atomic
locks
executors
extra——org.apache.commons.collections


猜你喜欢

转载自blog.csdn.net/qq_26409257/article/details/81537348