容器特点和应用场景

作者: insightcodeyk
出处: https://insightcodeyk.github.io/2018/03/27/ContainerFeatures/
声明: 本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0,转载请注明作者及出处。

1 数组 和 Arrays

谈到Collection和Map之前,首先要提到数组。数组是一种高效的存储和访问对象的逻辑结构顺序表的实现,以上是它的优点。而它的缺点在于其容量固定无法动态改变,且无法直接知道当前数组中实际元素个数。
对数组的操作JDK提供了工具类Arrays,其中包含了很多易用的方法。

2 Collection 和 Map

为了解决数组容量无法动态增加的情况,引入了容器,并扩展出了其他一些功能。

2.1 Collection 和 Map 的区别

重点区别在于:元素结构
Collection中元素是一个值
Map中元素是一个键值对

2.2 Collection 和 Map 子类特征

Collection:

List:维护有序集合(有序的含义是插入顺序)
Set:集合内无重复元素

Map:

HashMap:基于哈希表的Map,无序
TreeMap:基于红黑树的Map,有序

3 默认优先选择

3.1 List结构

默认选择: ArrayList
插入删除频繁: LinkedList
作为多线程公共资源: Vector(开发中不推荐用,资源消耗太大,多线程问题是另一问题,在concurrent包或者Collections工具类中通过其他方式实现)

3.2 Set结构

默认选择: HashSet(由HashMap,value指向一个静态Object类常量PRESENT)
对数据顺序有要求(不是插入顺序): TreeSet

3.2 Map结构

默认选择: HashMap
对数据顺序有要求(不是插入顺序): TreeMap

4 容器框架常用api和注意事项

https://insightcodeyk.github.io/2018/03/12/Container/