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