List三种遍历方式详解

list集合

list集合常用方法
1、add(int index, Object obj) 在指定的索引增加值
`
List list = new ArrayList();
list.add(0, “abc”);
list.add(0, “xyz”);
list.add(1, “qq”);
2、remove(int index) 根据指定索引删除数据
list.remove(1)

3、set(int index, Object obj) 将指定索引处的元素进行修改
list.set(1,“qq”);

4、get(int index) 获取指定索引处的元素
list.get(1)

list遍历
JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。

普通循环

list.add("abc");
		list.add("xyz");
		list.add("qq");
		list.add("qwer");
		for (int i = 0; i < list.size(); i++) {
			Object obj = list.get(i);
			if (i==0) {
				list.remove(1);
			}
		}
		System.out.println(list);

结果 :   [abc, qq, qwer]  
List<String> list = new ArrayList<>();
		list.add("abc");
		list.add("xyz");
		list.add("abc");
		list.add("xyz");
		list.add("qq");
		list.add("qwer");
		list.add("xyz");
		for (int i = 0; i < list.size(); i++) {
			String str = list.get(i);
			if (str.equals("xyz")) {
				list.remove(i);
				list.remove(i-1);
			}
		}
		System.out.println(list);
结果:[abc, xyz, qq]

总结:普通循环可以单独用来删除某个指定的元素,不适合用来进行多次的循环删除,因为ArrayList的底层是数组,当删除某个元素时候,索引也会发生相应的变化,比如你删除的是第1个数据,此时第2个数据就变成了第1个,下一次循环的时候实际读取的就是第3个数据

List<String> list = new ArrayList<>();
		list.add("abc");
		list.add("xyz");
		list.add("abc");
		list.add("xyz");
		list.add("qq");
		list.add("qwer");
		list.add("xyz");
		for (int i = 0; i < list.size(); i++) {
			String str = list.get(i);
			if (str.equals("xyz")) {
				list.remove(i);
			}
			System.out.println(str);
		}
		结果:
		abc
		xyz
		xyz
		qwer
		xyz

2、增加for循环

List<String> list = new ArrayList<>();
		list.add("abc");
		list.add("xyz");
		list.add("abc");
		list.add("xyz");
		list.add("qq");
		list.add("qwer");
		list.add("xyz");
		for(String str : list) {  //java.util.ConcurrentModificationException   
			//如果在使用迭代器遍历集合的同时,还用集合对象增删元素,就会出现此异常 ,增强for循环底层是Iterator
			if(str.equals("xyz")) {
				list.remove(str);
			}
		}

但是删除完毕马上使用break跳出,则不会触发报错。

	List<String> list = new ArrayList<>();
		list.add("abc");
		list.add("xyz");
		list.add("abc");
		list.add("xyz");
		list.add("qq");
		list.add("qwer");
		list.add("xyz");
		for(String str : list) {   
			if(str.equals("xyz")) {
				list.remove(str);
				break;
			}
		}
		System.out.println(list);
	}

结果 : [abc, abc, xyz, qq, qwer, xyz]

3、iterator遍历

迭代器遍历,迭代器增删
迭代器遍历:获取迭代器Iterator,使用迭代器遍历即可
迭代器删除:可以直接调用迭代器的remove方法
List特有迭代器 ListIterator listIterator()

List<String> list = new ArrayList<>();
		list.add("abc");
		list.add("xyz");
		list.add("abc");
		list.add("xyz");
		list.add("qq");
		list.add("qwer");
		list.add("xyz");
		Iterator<String> it = list.listIterator();
		while(it.hasNext()) {
			if(it.next().equals("xyz")) {
				it.remove();
			}
			System.out.println(it.next());//报错java.util.NoSuchElementException
			
		}
		System.out.println(list);
		
结果:xyz
  		  xyz
		qwer
		Exception in thread "main" java.util.NoSuchElementException
	at java.util.ArrayList$Itr.next(ArrayList.java:862)
	at com.wzl.list.Listwzl.main(Listwzl.java:23)

解决:如果已经没有下一个元素,却仍然要获取下一个元素,就会出现该异常,表示没有当前元素的异常,因此尽量不要在判断中判断是否有下一个元素之后,连续获取两个下一个元素

List<String> list = new ArrayList<>();
		list.add("abc");
		list.add("xyz");
		list.add("abc");
		list.add("xyz");
		list.add("qq");
		list.add("qwer");
		list.add("xyz");
		Iterator<String> it = list.listIterator();
		while(it.hasNext()) {
			String str = it.next();
			if(str.equals("xyz")) {
				it.remove();
			}
			System.out.println(str);
		}
		System.out.println(list);
	}

结果: abc
xyz
abc
xyz
qq
qwer
xyz
[abc, abc, qq, qwer]
  • 6
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值