目录
Collection集合
集合与数组的区别
1.数组的长度是固定的。集合的长度是可变的。
2.数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象,对象的数据类型可以不一致。
集合的家族
作为单列集合的顶层,是其他集合的父类,因此Collection它是没有索引的。
Collection集合的常用方法
Iterator迭代器
为什么要使用迭代器?
前面我们说了Collection集合是没有索引的,而没有索引就意味着不能通过索引来遍历集合,那通过什么的?迭代器是一个通用的方法,可以满足所有集合的遍历
迭代器的使用方法
首先,迭代器是一个接口,我们无法直接使用,需要使用Iterator接口的实现类对象,获取实现类的方式比较特殊。Collection接口有一个方法叫iterator(),这个方法返回的就是迭代器的实现类对象。
使用步骤:
1.使用集合中的方法iterator()获取迭代器的实现类对象,使用Iterator接口接收(多态)
2.使用Iterator接口中的方法hasNext判断还有没有下一个元素
3.如果Iterator接口中的方法next取出集合中的下一个元素
Collection<String> coll = new ArrayList<>();
Iterator<String> it = coll.iterator();
//while循环
while(it.hasNext()){
String s = it.next();
}
//for循环
for(Iterator<String> it1 = coll.iterator(); it1.hasNext();){
String s = it1.next();
}
迭代器的原理
初始化迭代器对象的时候指针指向的是-1,遍历时iterator做了两件事。第一是取出下一个元素,第二是把指针向后移动一位。
增强for循环
什么是增强for循环
增强for循环也称(for each循环)是jdk1.5之后出来的高级for循环,专门用来遍历数组和集合。它的内部原理其实是迭代器,所以在遍历的过程中,不能对集合中的元素进行增删改操作。
Collection<E> extends Iterable<E> 因此所有的单列集合都可以使用增强for。
为什么不能对集合中的元素进行增删改操作?
增强for循环的原理是每当遍历了一个元素,指针会自动指向下一个元素。也就是说,当你遍历时,数组或集合中已经遍历好的元素的顺序被确定了,如果你在遍历未完成时执行增删改操作,这样打乱了数组遍历时的顺序,这是不被允许的。
增强for循环的使用
//格式
for(集合/数组的数据类型 变量名: 集合名/数组名){
//...
}
//使用增强for循环遍历集合
ArrayList<String> list = new ArrayList<>();
for(String s : list){
//...
}
//使用增强for循环遍历数组
int[] array = {1,2,3,4,5};
for(int i : array){
//...
}