Java基础 —— 集合(一)
集合(一)
数组和集合的区别
-
数组是固定长度的数据结构,而集合是动态的数据结构
-
数组可以包含基本数据类型和对象,集合只能包含对象
-
数组只能存放同一类型的数据,而集合可以蹲房不同类型的
-
数组可以直接访问元素,集合需要通过迭代器或其他方法访问元素
集合的分类
根据上图,可以看出,Java中集合的核心就是collection
、map
、Iterator
,Collections
是对集合进行操作的工具类,在图中,虚框代表接口或者抽象类,实框是类,实箭头表示继承,虚箭头表示实现;
collection:是集合List、Set、Queue的最基本接口
map:映射表的基础接口
Iterator:迭代器,可以通过迭代器遍历集合中的数据
集合主要可以分为两类(collection
和map
)
-
collection:集合List、Set、Queue的最基本接口(单列集合)
-
List:所有元素按照进入先后顺序进行存储,可重复集合,存取顺序一致
-
ArrayList:底层是数组,随机访问,增删慢,查询快,线程不安全
扩容机制:
- ArrayList容量为0时,添加元素需要扩容
-
无参构造:创建ArrayList后容量为0,添加一个元素后,容量变成10,之后正常扩容(为原来的1.5倍)
-
传容量构造:参数为0时,创建ArrayList后容量为0,添加一个元素后,容量为1,之后正常扩容
-
传列表参数:列表为空时,创建ArrayList后容量为0,添加一个元素后,容量为1,之后正常扩容
- ArrayList容量大于0,且是满的时,添加元素,正常扩容
-
LinkedList:底层是双向链表,增删快,查询慢,线程不安全
-
Vector:和ArrayList基本一样,但是它线程安全
-
-
Set:不允许包含重复的值(可以为空,但是只能有一个),无序
-
HashSet:使用哈希表存储元素,无序,其底层包装了一个HashMap去实现,所以查询插入速度较快
- LinkedHashSet:继承自HashSet类,它增加了一个重要特性,就是元素按照插入顺序进行存储
-
TreeSet:底层是基于TreeMap实现,它支持两种排序:自然排序和定制排序
-
-
Queue:队列,先进先出
-
-
Map:映射表的基础接口(双列集合)
-
HashTable:用哈希表实现,不可重复
key
,key
不能为空,效率较低,线程安全 -
HashMap:用哈希表实现,不可重复
key
,key
可以为空,效率较高,线程不安全- LinkedHashMap:用哈希表和双向链表实现,按照
key
的插入顺序存储
- LinkedHashMap:用哈希表和双向链表实现,按照
-
TreeMap:用红黑树算法实现,默认按照所有的
key
进行升序排序,也可自定义排序方式
-