Java集合详解

看了很多文章关于集合的讲解,总算理解各个类之间的联系,简单总结如下几点:

什么是集合?

Java是面向对象的语言,我们在编程的时候自然需要存储对象的容器,数组可以满足这个需求,但是数组初始化时长度是固定的,但是我们往往需要一个长度可变化的容器,因此,集合出现了。

Java集合在java.util包中,这些集合可以看作是容器,用来存储、获取、操纵和传输具有相同性质的多个元素。

现实中的容器主要是添加对象、删除对象、清空对象等。衣柜里面的衣服,可以放入和取出,也可以有序摆放,以便快速的查找,Java集合也是如此,有些是方便插入和删除的,有些是为了方便查找数据。

集合类的继承关系

Collection接口是集合类的根接口,Java中没有提供这个接口的直接的实现类。
MapJava.util包中的另一个接口,它和Collection接口没有关系,是相互独立的,但是都属于集合类的一部分。Map包含了key-value对。Map不能包含重复的key,但是可以包含相同的value。

Java中常用的集合类有List集合、Set集合和Map集合。其中List集合和Set集合继承了Collection接口(Java5后新增了队列Queue),List接口的实现类为ArrayListLinkedList

Map接口有两个实现类,HashMapHashTable,如下图:

Collection 接口的接口 对象的集合(单列集合)
│——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
│—————-├ Vector 接口实现类 数组, 同步, 线程安全
│———————-└ Stack 是Vector类的实现类
│——-Set 接口: 仅接收一次,不可重复,并做内部排序
│—————-├ HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
│—————- ├ TreeSet 底层实现为二叉树,元素排好序

Map 接口 键值对的集合 (双列集合)
│————Hashtable 接口实现类, 同步, 线程安全
│————HashMap 接口实现类 ,没有同步, 线程不安全
│—————–├ LinkedHashMap 双向链表和哈希表实现
│—————–├ WeakHashMap
│———––TreeMap 红黑树对所有的key进行排序
│————IdentifyHashMap

总结各集合类之间对比

Arraylist LinkedList HashSet TreeSet ArrayDeque PriorityQueue HashMap TreeMap
是否有序 有序 有序 无序 有序 有序 有序 无序 有序
存储结构 集合 集合 无集合 集合 集合 集合 键值对 键值对
线程安全
元素是否有重复 键值唯一,相同覆盖 键值唯一,相同覆盖
元素是否可为null
底层数据结构 数组 链表 哈希表 二叉树 循环数组 哈希表 红黑树
特点 查询快,增删慢 查询慢,增删快 快速查找 快速排序 查询快,增删慢 / 插入、删除和定位元素快 按自然顺序或自定义顺序遍历快
数据结构

ArrayXxx:底层数据结构是数组,查询快,增删慢
LinkedXxx:底层数据结构是链表,查询慢,增删快
HashXxx:底层数据结构是哈希表。依赖两个方法:hashCode()和equals()
TreeXxx:底层数据结构是二叉树。两种方式排序:自然排序和比较器排序

何时使用:

参考资料:
https://thinkwon.blog.csdn.net/article/details/98844796
https://blog.csdn.net/feiyanaffection/article/details/81394745

你可能感兴趣的:(Java集合详解)