为什么我们要使用集合?
自动拓容的容器。
Collection集合
1.Collection简介
A. Java集合框架提供了一套性能优良、使用方便的接口和类,它们位于java.util包中,其中Collection表示集合的顶层接口,它表示一种容器,容器中可以存储一组对象,存储的对象称为集合或者容器的元素(item)。注意集合中只能存储引用数据类型。
B. Collection根据存储数据的特征可以分为:
List:可重复的,有序的数据
Set:唯一的,无序的数据
Collection接口中定义了增删改查的方法用于操作容器。
2.Collection的常用方法
public
注意:Collection 集合中可以存储不同数据类型的引用数据。但实际开发过程中建议开发者存同一类型。
3.Collection遍历
Collection接口继承Iterable接口,表示Collection实现类具有可遍历的能力。Iterable接口定义了一个iterator方法用于返回集合的迭代器,该迭代器是一个Iterator接口,定义了hasNext()用于判断集合是否有下一个元素,next()用于取出下一个元素。
public
4.Collection的子接口
Collection是集合框架的顶层接口,只提供对集合的抽象操作(增、删),如果要具体对容器进行精确性的操作,需要其子接口。Collection有两个子接口
List接口,表示序列,其存储的元素是有序的,可重复的
Set 接口,表示数学概念上集合,其存储的元素是无序的、唯一的。
List接口
有序的集合(也称为序列)。可以对列表中每个元素的插入位置进行精确地控制。也可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。
1.List接口的常用方法
public
2.List接口的遍历
List 继承Collection,并继承Iterable接口,具备遍历的能力。List实现类实现了iterator方法().List接口还提供了listIterator()方法,用于获取一个序列迭代器。序列迭代器实现了ListIterator接口,该接口允许开发者以任一方向遍历集合。
ListIterator 继承Iterator接口,增了hasPrevious()和previous()用于逆向遍历集合。
public
数据结构
根据数据的存储结构,可以分为线性表,链表,栈,队列等。
线性表
根据数据存储的不同,线性表可以分为数组,链表。
数组的物理空间和逻辑空间一致
数组和链表比较
数组:查找速度快,但插入和删除需要移动元素,效率低
链表:查询效率低(必须从头开始查),插入和删除效率高。
栈
栈数据结构操作数据时只有一个口(即是入口又是出口),数据先进后出。
队列
队列数据结构操作数据时有两个口,一个是入口,一个是出口,数据是先进先出。
ArrayList/Vector
ArrayList 底层数据结构是数组,是List接口的容量大小可变的数组。
拓展规则:当向ArrayList中添加元素时,默认空间能存储10个元素,当容量不足时,按照
oldCapacity + oldCapacity / 2 原则拓容。
ArrayList是线程不安全的,不保证同步,效率高。
Vector 底层数据结构数组,是List接口大小可变数组的实现。
拓展原则: 当向Vector中添加元素时,默认空间能存储10个元素,当容量不足时,分两种情况
[1] 如果提供增长因子:按照增长因子拓展
[2] 没有提供增长因子:按照oldCapacity
Vector是线程安全的,保证同步,效率低。jdk1.0。
未来如果使用Vector时,一定要用List接口去使用它,不要有特有方法xxxElement()。
LinkedList
LinkedList 底层数据结构是链表,是List接口的链表实现。
LinkedList还实现了栈形式来操作
public
可以单向队列(Queue)接口操作LinkedList
public
LinkedList还实现双向队列(Deque)接口(C)
public