List集合遍历列表迭代器的特有功能

List集合

1.所属包名:java.util.List
2.List有索引,可以用普通for循环。(没有索引,就不可以用普通for循环。)
3.List是有序的Collection,也称为序列。
4.List集合的特点:
(1)有序(存储和取出元素的顺序一致)
(2)存储的元素可重复

5.代码
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
List list = new ArrayList();
list.add(“hello”);
//…
Iterator it = list.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}

6.List集合特有的成员方法(完全是针对索引操作的)
void add(int index, E element);//在指定位置添加元素,后面的元素往后移
E remove(int index);//删除指定位置的元素,返回被删除的元素
E get(int index);//获取指定位置的元素
E set(int index, E element);//修改指定位置的元素,返回被修改的元素

7.List集合的普通for遍历
(1)迭代器
(2)普通for循环 int size()
for(int i = 0; i < list.size(); i++){
System.out.println(list.get(i));
}

8.List列表迭代器的特有功能
ListIterator listIterator();//返回此列表元素的列表迭代器,允许程序员按任意方向遍历列表。正向遍历方式与Iterator相同。
public interface ListIterator extends Iterator;
ListIterator list = list.listIterator();
特有功能:
E previous();//返回列表中的前一个元素
boolean hasPrevious();//如果以逆向遍历列表,列表迭代器有多个元素,则返回true
注意事项:ListIterator可以实现逆向遍历,但是要求先正向遍历,才能逆向遍历。

9.ConcurrentModificationException并发修改异常的原因及解决方案
产生的原因:迭代器依赖于集合而存在,在判断成功后,集合中添加了新元素,而迭代器并不知道,所以就报错了。即迭代器遍历集合中的元素的时候,不要使用集合对象去修改集合中的元素。
解决方案:
方案一:用列表迭代器时,迭代器遍历的时候,用迭代器修改集合中的元素。元素是跟在刚才迭代的元素后面的。
方案二:用普通for循环时,集合遍历的时候,可以通过集合对象修改集合中的元素。元素是在最后添加的。(推荐此方案)
方案一的代码:
ListIterator it = list.listIterator();
while(it.hasNext){
Student stu = it.next();
if(stu.equals(stu2)){
it.add(stu4);//用迭代器添加
}
}
方案二的代码:
for(int i = 0; i < list.size(); i++){
Student stu = list.get(i);
if(stu.equals(stu2)){
list.add(stu4);//用集合添加
}
}

10.正向删除时,要调整i,i–
逆向删除时,不用调整i
正向删除的代码:
for(int i = 0; i < list.size(); i++){
if(list.get(i).equals(“5”)){
list.remove(i);
i–;
}
}

逆向删除的代码:
for(int i = list.size(); i >= 0; i–){
if(list.get(i).equals(“5”)){
list.remove(i);
}
}

11.增强for:是for循环的一种
格式:
for(元素的数据类型 变量名:数组名或者Collection集合对象名){
使用变量名即可,这个变量名代表的就是数组或者Collection集合中的元素
}
例如:
for(int x:arr){
System.out.println(x);
}
好处:简化了数组和Collection集合的遍历
弊端:目标不能为null
在遍历前,对目标做不为null的判断:
if(list != null){
for(…:list){…}
}
增强for其实就是用来替代迭代器的。

用哪种循环?只想打印集合时,用增强for;如果有增删集合时,用普通for。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值