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