集合
1、什么是集合? 对象类型的数组
2、定义了一个数组,数组的元素的类型引用数据类型
3、这种数组称为对象数组,数组每个元素其实都是一个对象的地址,而非对象本身。
class Person{
String name;
int age;
}
Person[] persons = new Person[5];
4、集合的来源:数组的不足:
无法扩展:数组的长度是固定的,一旦创建,就无法修改。
结果:每一次进行扩展时都要把原来的数组进行复制到另一个更大的空间。
解决:将对象类型的数组,变成某个类型的私有成员变量。对于数组的种种操作,都封装成公有的方法。
集合就是数组的封装
5、集合和数组的区别
1.共同点:
都是用于存储数据的容器。可以更加方便统一管理数据。
2.不同点:
1.存储内容不同。
数组既可以存在基本数据类型,也可以存储引用数据类型。必须是相同类型的元素
集合只能存储引用数据类型。可以存储不同类型的元素。
2.存储数量不同:
数组的长度是不可变的,一旦确定大小就无法增删
集合的长度是可变的,是一个可伸缩的容器
3.方法不同:
数组中只有Object定义的方法,以及一个length属性
集合中可以有很多的方法。
6、集合的体系结构
7、Collection
1.Collection是一个接口,不能创建对象,找一个实现类来调用方法。
2.使用实现类ArrayList来调用接口中的方法。
3.常用方法:
boolean add(Object obj)
boolean remove(Object o)
void clear()
boolean isEmpty()
boolean contains(Object o)
int size()
4.Collection中带all方法
addAll:把一个集合中的数据全部添加到另一个集合中
containsAll:判断是否全部包含
removeAll:删除两个集合的交集部分
retainAll:保留两个集合的交集部分
5.集合的遍历
1.转成数组,通遍历数组的方式来间接的遍历集合
Object toArray():可以把集合转变为数组
2.迭代器
爪子
Iterator iterator()
hasNext() :判断是否有下一个元素
next():获取下一个元素
8、List
1.是Collection的一个子接口
2.特点:
有序:每个元素都有自己的位置,不同位置是有分别的。
有索引:每个元素都自己的编号。
可以存放相同元素,即使用相同的元素,位置不同,也可以区分开来。
3.特有方法
add(int index, E element)
remove(int index)
set(int index, E element)
get(int index)
4.List集合的遍历(第三种遍历)
siz() get(i)
5.并发修改异常
java.util.ConcurrentModificationException
因为集合本身和迭代器都在操作集合,操作冲突。
解决方式:要么全部使用集合操作,要么全部使用迭代器操作。
ListIterator是Iterator的子接口,
hasPrevious():判断是否有上一个元素
previous() :获取上一个元素
9、Vector
1.List只是一个接口,根据底层实现方式的不同,具有不同的实现类
ArrayList:底层结构是数组,数组实现,顺序存储
LinkedList:底层结构是链表,节点实现,链式存储
Vector:底层结构是数组,数组实现,顺序存储
2.Vector
1.jdk1.0出现,jdk1.2被ArrayList替代。
2.特点:
线程安全,效率较低
顺序存储,增删较慢
3.特有遍历方式
addElement(E obj)
removeElement(Object obj)
Enumeration<E> elements()
boolean hasMoreElements()
E nextElement()
10、ArrayList
1.是List的一个实现类
2.没有什么特别的方法
3.存储方式
数组实现,顺序存储
通过物理内存的位置关系,来表示描述逻辑顺序的相邻。
11、LinkedList
1.是List的一个实现类
2.存储方式
节点实现,链式存储
不通过物理内存位置的相邻来表示逻辑顺序的相邻
每个元素都存储在一个节点中,节点除了元素数据本身之外,还需要存储下一个元素的内存地址。
3.查询速度慢需要根据前面的节点来获取后一个节点的地址,前面所有的节点都访问一遍,节点数量多,查询速度较慢。
4.增删速度极快,增删一个元素,只需要修改新增元素前后两个节点的引用域即可,与集合本身的元素个数无关。
5.特有方法
操作头部和尾部的特有方法
addFirst(E e)
addLast(E e)
removeFirst()
removeLast()
getFirst()
getLast()