作者: 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