本文源码:GitHub·点这里 || GitEE·点这里
集合容器是Java开发中最基础API模块,通常用来存储运行时动态创建的元素,基本特点如下:
这里对存储数量是受到程序和内存等环境制约的,从List的get()方法中可以看出,index的范围是Integer.MAX_VALUE。
三大核心接口:List、Set继承Collection, Map独立接口
List与Set体系
List体系核心API:ArrayList,LinkedList、Vector
Set体系核心API:HashSet、TreeSet、LinkedHashSet
Queue队列API:PriorityQueue、LinkedHashSet
Map体系
Map体系核心API:HashMap、LinkedHashMap、TreeMap、Hashtable
基本熟练使用并理解集合容器,需要知道如上几块内容:API基础用法,线程安全问题;容器大小与扩容;结构特点,数组、链表、哈希表;
Collection:集合容器的根接口,定义公共方法;
List体系:
维护Object数组实现,特点:查询快,增删慢,非线程安全,所以效率高。
底层维护链表数据结构实现,特点:查询慢,增删快,非线程安全,所以效率高。
底部维护Object数组,实现和ArrayList一样,但是Vector是线程安全,效率低。
Set体系:
底层是使用了哈希表来支持的,特点:存取速度快,元素唯一且无序。
底层数据结构是链表和哈希表,链表保证元素有序性,哈希表保证元素唯一性,非线程安全。
数据结构是红黑树,如果元素具备自然顺序的特性,那么就按照元素自然顺序的特性进行排序,或者基于比较器自定义排序。
Map体系:
Map接口的实现类,具备的特点:存储的数据都是以键值对的方式,键不可以重复,值可重复。
底层使用hashCode表来实现向HashMap中添加元素,允许使用null值和null键,不保证元素的顺序固定。
TreeMap:基于二叉树的数据结构实现的,会对具备自然特性的键进行排序存储:元素的键具备自然特性,直接排序存储;不具备自然特性,实现Comparable接口,在ComparaTo中定义排序规则。
线程安全,相对效率低,不允许使用null值。
GitHub·地址
https://github.com/cicadasmile
GitEE·地址
https://gitee.com/cicadasmile
推荐阅读:架构设计系列
原文:https://www.cnblogs.com/cicada-smile/p/13661362.html