java集合框架(Java Collections Framework)为开发者提供了一系列通用容器,所谓容器就是可以容纳其他对象的对象,在
jdk1.2
开始,就提供了通用容器。
1.Java集合框架的概述
容器是用于容纳其他对象的对象,因此基本数据类型无法直接使用容器,必须要转换成包装类后才可以使用,这里就涉及到了包装类的概念。
所有的集合类都存在于:java.util
包下
Java集合框架的优点:
-
降低编程难度
-
提高程序性能
-
提高API之间的互操作性
-
降低学习难度
-
提高代码的重用性
1.1 集合和数组的异同
-
相同点:
-
都是对多个数据进行存储操作的容器
-
都是内存层面的存储结构,不涉及到持久化存储层面
-
-
不同点
-
数组:
-
一旦初始化以后,长度就确定了–不可修改
-
声明后,元素的类型必须一致,只能操作指定类型的数据–只能存储一种类型的数据(可以是基本数据类型,也可以是对象)
-
提供的方法有限,不利于增删改查等操作,也没有提供相应的属性
-
数组的存储特点:有序,可重复
-
-
集合:
-
只能保存对象
-
支持保存具有映射关系的数据
-
可扩容
-
增删改查方法多,便于对各种数据的操作
-
-
2.集合继承树
集合主要分为两大接口:
-
Collection接口:单列集合,用来存储一个一个的对象
-
List接口:有序–添加顺序,可重复
-
ArrayList:线程不安全、遍历快,增删慢、底层使用数组
-
Vector:线程安全、遍历快、增删慢,底层使用数组
-
LinkedList:线程不安全、遍历慢,增删快,底层使用双向循环链表
-
-
Set接口:无序–添加顺序,不可重复
-
HashSet:底层使用HashMap实现,存取速度快
-
TreeSet:底层二叉树实现,内部是TreeMap和SortedMap
-
LinkedHashSet:hash表存储、双向链表记录插入记录、底层是LinkHashMap
-
EnumSet:
-
-
Queue(队列)
-
PriorityQueue:基于堆结构实现,可以实现优先队列,非FIFO,每次取最小元素
-
ArrayDeque:底层基于循环数组实现双端队列
-
-
-
Map集合(字典):双列集合,用来存储一对一对的数据(采用键对值的形式key-value),相当于“函数”,key不可重复,value可重复
-
HashMap:线程不安全、底层数组+链表+红黑树、key值和value值可为null,
-
Hashtable:线程安全、底层hash表、key和value都不允许为null
-
TreeMap:线程不安全、底层二叉树、key值不可为null,value可以为null
-
LinkedHashMap:使用双向链表来维护元素的顺序,顺序为插入顺序或则最近最少使用顺序(LRU)
-