本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
4分43秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器
步骤 2 : 迭代器遍历 步骤 3 : 用增强型for循环 步骤 4 : 练习-删除ArrayList中的数据 步骤 5 : 答案-删除ArrayList中的数据
通过前面的学习,知道了可以用size()和get()分别得到大小,和获取指定位置的元素,结合for循环就可以遍历出ArrayList的内容
package collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import charactor.Hero;
public class TestCollection {
public static void main(String[] args) {
List<Hero> heros = new ArrayList<Hero>();
// 放5个Hero进入容器
for (int i = 0; i < 5; i++) {
heros.add(new Hero("hero name " + i));
}
// 第一种遍历 for循环
System.out.println("--------for 循环-------");
for (int i = 0; i < heros.size(); i++) {
Hero h = heros.get(i);
System.out.println(h);
}
}
}
使用迭代器Iterator遍历集合中的元素
package collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import charactor.Hero;
public class TestCollection {
public static void main(String[] args) {
List<Hero> heros = new ArrayList<Hero>();
//放5个Hero进入容器
for (int i = 0; i < 5; i++) {
heros.add(new Hero("hero name " +i));
}
//第二种遍历,使用迭代器
System.out.println("--------使用while的iterator-------");
Iterator<Hero> it= heros.iterator();
//从最开始的位置判断"下一个"位置是否有数据
//如果有就通过next取出来,并且把指针向下移动
//直到"下一个"位置没有数据
while(it.hasNext()){
Hero h = it.next();
System.out.println(h);
}
//迭代器的for写法
System.out.println("--------使用for的iterator-------");
for (Iterator<Hero> iterator = heros.iterator(); iterator.hasNext();) {
Hero hero = (Hero) iterator.next();
System.out.println(hero);
}
}
}
使用增强型for循环可以非常方便的遍历ArrayList中的元素,这是很多开发人员的首选。
不过增强型for循环也有不足: 无法用来进行ArrayList的初始化 无法得知当前是第几个元素了,当需要只打印单数元素的时候,就做不到了。 必须再自定下标变量。 package collection;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import charactor.Hero;
public class TestCollection {
public static void main(String[] args) {
List<Hero> heros = new ArrayList<Hero>();
// 放5个Hero进入容器
for (int i = 0; i < 5; i++) {
heros.add(new Hero("hero name " + i));
}
// 第三种,增强型for循环
System.out.println("--------增强型for循环-------");
for (Hero h : heros) {
System.out.println(h);
}
}
}
首先初始化一个Hero集合,里面放100个Hero对象,名称分别是从
hero 0 hero 1 hero 2 ... hero 99. 通过遍历的手段,删除掉名字编号是8的倍数的对象
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
5分22秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器
这个练习的考点是,不能够在使用Iterator和增强for循环遍历数据的同时,删除数据,否则会抛出ConcurrentModificationException
解决办法,是准备一个临时容器,专门用来保存需要删除的对象。 然后再删掉 package collection;
import java.util.ArrayList;
import java.util.List;
import charactor.Hero;
public class TestCollection {
public static void main(String[] args) {
List<Hero> heros = new ArrayList<Hero>();
// 放100个Hero进入容器
for (int i = 0; i < 100; i++) {
heros.add(new Hero("hero name " + i));
}
//准备一个容器,专门用来装要删除的对象
List<Hero> deletingHeros = new ArrayList<>();
for (Hero h : heros) {
int id = Integer.parseInt(h.name.substring(10));
if (0 == id % 8)
deletingHeros.add(h);
}
for (Hero h : deletingHeros) {
heros.remove(h);
}
// heros.removeAll(deletingHeros); //直接通过removeAll删除多个Hero对象
System.out.println(heros);
}
}
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2024-07-07
三种遍历方法删除指定的对象
2 个答案
木宇 跳转到问题位置 答案时间:2024-07-09 打卡
虚心求学 跳转到问题位置 答案时间:2024-07-07 测试10万数组长度,比较这几种遍历方法的性能。
数组长度:100,000,防止卡顿只打印前30个元素
for():
Spend time is 3625 ms
H1 H2 H3 H4 H5 H6 H7 H9 H10 H11
H12 H13 H14 H15 H17 H18 H19 H20 H21 H22
H23 H25 H26 H27 H28 H29 H30 H31 H33 H34
foreach():
Spend time is 3266 ms
H1 H2 H3 H4 H5 H6 H7 H9 H10 H11
H12 H13 H14 H15 H17 H18 H19 H20 H21 H22
H23 H25 H26 H27 H28 H29 H30 H31 H33 H34
while (iter.hasNext()):
Spend time is 3345 ms
H1 H2 H3 H4 H5 H6 H7 H9 H10 H11
H12 H13 H14 H15 H17 H18 H19 H20 H21 H22
H23 H25 H26 H27 H28 H29 H30 H31 H33 H34
for (Iterator<Hero> iter = heros.iterator(); iter.hasNext(); ):
Spend time is 6466 ms
H1 H2 H3 H4 H5 H6 H7 H9 H10 H11
H12 H13 H14 H15 H17 H18 H19 H20 H21 H22
H23 H25 H26 H27 H28 H29 H30 H31 H33 H34
结论:增强for效率最高
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2023-10-30
倒序遍历
2 个答案
晚安嘛 跳转到问题位置 答案时间:2024-03-26 倒序遍历的你真是个天才!
wr123 跳转到问题位置 答案时间:2023-11-23 package collection;
import java.util.ArrayList;
import charactor.Hero;
public class TestCollection {
public static void main(String[] args) {
ArrayList heros = new ArrayList();
// 初始化5个对象
for (int i = 0; i < 100; i++) {
heros.add(new Hero("hero " + i));
}
for (int i =heros.size(); i >=0; i--) {
if(i%8==0){
heros.remove(i);
}
}
System.out.println("ArrayList heros:\t" + heros);
}
}
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-11-18
用while,parseint,split
2022-07-15
给Hero类增加一个ID属性也可以实现
2022-05-31
所以为什么要一直纠结在用for上面呢,用while更方便
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 73 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|