本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
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公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
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
2 个答案
CharlieLong 跳转到问题位置 答案时间:2023-09-19 答案:首先初始化一个Hero集合,里面放100个Hero对象,名称分别是从
hero 0
hero 1
hero 2
...
hero 99.
通过遍历的手段,删除掉名字编号是8的倍数的对象
Bingod 跳转到问题位置 答案时间:2023-01-29 为啥这样写就不会报ConcurrentModificationException
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-07-15
给Hero类增加一个ID属性也可以实现
2022-05-31
所以为什么要一直纠结在用for上面呢,用while更方便
2022-05-28
for循环最简单
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 72 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|