list 遍历_三种遍历方法

list 遍历_三种遍历方法list集合list集合常用方法1、add(intindex,Objectobj)在指定的索引增加值`Listlist=newArrayList();list.add(0,“abc”);list

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]

今天的文章list 遍历_三种遍历方法分享到此就结束了,感谢您的阅读。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/78433.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注