how2j.cn

本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频



4分43秒
本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)



关键字 简介 示例代码
for
用for循环遍历
示例代码
iterator
迭代器遍历
示例代码
for:
用增强型for循环
示例代码
练习-删除ArrayList中的数据
示例代码
答案-删除ArrayList中的数据
示例代码
步骤 1 : 用for循环遍历   
步骤 2 : 迭代器遍历   
步骤 3 : 用增强型for循环   
步骤 4 : 练习-删除ArrayList中的数据   
步骤 5 : 答案-删除ArrayList中的数据   

步骤 1 :

用for循环遍历

通过前面的学习,知道了可以用size()和get()分别得到大小,和获取指定位置的元素,结合for循环就可以遍历出ArrayList的内容
用for循环遍历
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); } } }
步骤 2 :

迭代器遍历

使用迭代器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); } } }
步骤 3 :

用增强型for循环

使用增强型for循环可以非常方便的遍历ArrayList中的元素,这是很多开发人员的首选。

不过增强型for循环也有不足:
无法用来进行ArrayList的初始化
无法得知当前是第几个元素了,当需要只打印单数元素的时候,就做不到了。 必须再自定下标变量。
用增强型for循环
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); } } }
步骤 4 :

练习-删除ArrayList中的数据

Or  姿势不对,事倍功半! 点击查看做练习的正确姿势
首先初始化一个Hero集合,里面放100个Hero对象,名称分别是从
hero 0
hero 1
hero 2
...
hero 99.

通过遍历的手段,删除掉名字编号是8的倍数的对象
步骤 5 :

答案-删除ArrayList中的数据

在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频

5分22秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)


这个练习的考点是,不能够在使用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公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-12-11 作业
DDDDDDDD



--------使用while的iterator------- hero1 hero2 hero3 hero4 hero5 hero6 hero7 hero9 hero10 hero11 hero12 hero13 hero14 hero15 hero17 hero18 hero19 hero20 hero21 hero22 hero23 hero25 hero26 hero27 hero28 hero29 hero30 hero31 hero33 hero34 hero35 hero36 hero37 hero38 hero39 hero41 hero42 hero43 hero44 hero45 hero46 hero47 hero49 hero50 hero51 hero52 hero53 hero54 hero55 hero57 hero58 hero59 hero60 hero61 hero62 hero63 hero65 hero66 hero67 hero68 hero69 hero70 hero71 hero73 hero74 hero75 hero76 hero77 hero78 hero79 hero81 hero82 hero83 hero84 hero85 hero86 hero87 hero89 hero90 hero91 hero92 hero93 hero94 hero95 hero97 hero98 hero99
package Collection;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 首先初始化一个Hero集合,里面放100个Hero对象,名称分别是从 hero 0 hero 1 hero 2 ... hero 99.
 * 
 * 通过遍历的手段,删除掉名字编号是8的倍数的对象
 * 
 * @author Abel
 *
 */
public class ArrayListSearchTest {

	public static void main(String[] args) {
		
		List<Hero> l = new ArrayList<>();
		
		for (int i = 0; i < 100; i++) {
			l.add(new Hero("hero"+i));
		}
		System.out.println("--------使用while的iterator-------");
		
		Iterator<Hero> it = l.iterator();
		
		while(it.hasNext()){
			Hero h = it.next();
			String name = h.name;
			StringBuffer sb = new StringBuffer(name);
			sb.delete(0, 4);
			int num = Integer.parseInt(sb.toString());
			if( num%8 == 0){
				it.remove();
			}else{
				System.out.print(h.name+"  ");
			}
			if( num%10 == 0){
				System.out.print('\n');
			}
		}
		

	}
}

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2018-11-26 交作业
bigbang0



hero 0 hero 2 hero 3 hero 4 hero 5 hero 6 hero 7 hero 8 hero 10 hero 11 hero 12 hero 13 hero 14 hero 15 hero 16 hero 18 hero 19 hero 20 hero 21 hero 22 hero 23 hero 24 hero 26 hero 27 hero 28 hero 29 hero 30 hero 31 hero 32 hero 34 hero 35 hero 36 hero 37 hero 38 hero 39 hero 40 hero 42 hero 43 hero 44 hero 45 hero 46 hero 47 hero 48 hero 50 hero 51 hero 52 hero 53 hero 54 hero 55 hero 56 hero 58 hero 59 hero 60 hero 61 hero 62 hero 63 hero 64 hero 66 hero 67 hero 68 hero 69 hero 70 hero 71 hero 72 hero 74 hero 75 hero 76 hero 77 hero 78 hero 79 hero 80 hero 82 hero 83 hero 84 hero 85 hero 86 hero 87 hero 88 hero 90 hero 91 hero 92 hero 93 hero 94 hero 95 hero 96 hero 98 hero 99 **************************************************************** [hero 1, hero 2, hero 3, hero 4, hero 5, hero 6, hero 7, hero 9, hero 10, hero 11, hero 12, hero 13, hero 14, hero 15, hero 17, hero 18, hero 19, hero 20, hero 21, hero 22, hero 23, hero 25, hero 26, hero 27, hero 28, hero 29, hero 30, hero 31, hero 33, hero 34, hero 35, hero 36, hero 37, hero 38, hero 39, hero 41, hero 42, hero 43, hero 44, hero 45, hero 46, hero 47, hero 49, hero 50, hero 51, hero 52, hero 53, hero 54, hero 55, hero 57, hero 58, hero 59, hero 60, hero 61, hero 62, hero 63, hero 65, hero 66, hero 67, hero 68, hero 69, hero 70, hero 71, hero 73, hero 74, hero 75, hero 76, hero 77, hero 78, hero 79, hero 81, hero 82, hero 83, hero 84, hero 85, hero 86, hero 87, hero 89, hero 90, hero 91, hero 92, hero 93, hero 94, hero 95, hero 97, hero 98, hero 99]
package com.how2j.collection;

import java.util.ArrayList;
import java.util.List;

/**
 * 首先初始化一个Hero集合,里面放100个Hero对象,名称分别是从 hero 0 hero 1 hero 2 ... hero 99.
 * 通过遍历的手段,删除掉名字编号是8的倍数的对象
 * 
 * @author litte
 *
 */
public class Practoce01 {

	public static void main(String[] args) {
		List<Hero> heros = new ArrayList<>();
		for(int i = 0;i<100;i++) {
			heros.add(new Hero("hero "+i));
		}
		int count = 0;
		for (int i = 0; i < heros.size(); i++) {
			Hero hero = heros.get(i);
			String[] splitStr = hero.toString().split(" ");
			int num = Integer.parseInt(splitStr[1]);
			if(num%8==0) {
				heros.remove(hero);
			}
			count++;
			System.out.print(hero+"\t");
			if(count%8 == 0) {
				System.out.print("\n");
			}
		}
		System.out.println("\n****************************************************************");
		System.out.println(heros);
	}
}

							






答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2018-11-26 交作业
2018-11-21 小白一枚请多指教
2018-11-21 为什么这样会报错呢
2018-11-06 交作业
2018-11-06 交作业
2018-09-20 做完了,睡觉》》》》》》
2018-09-05 作业答案
2018-08-28 交作业
2018-08-19 哇~!终于搞定了!我不用i%8==0做!交作业!
2018-08-01 交作业,倒序删除最优化
2018-07-30 交作业
2018-07-23 Iterator<Hero> iterator = heros.iterator(); iterator.hasNext();求解释
2018-07-11 站长答案第26行为啥还是用了增强for循环删除呢?
2018-07-03 为什么删除的是9的倍数啊???
2018-06-29 作业
2018-06-18 使用迭代器遍历能获得当前索引的指针吗
2018-05-21 迭代器可以删除元素
2018-04-17 解题方法
2018-03-07 练习--删除ArrayList中的数据
2018-03-02 联系题
2018-01-01 不能在遍历数据时候删除数据是因为指令重排么?
2017-12-05 试了下,发现迭代器遍历的时候可以进行删除操作
2017-12-05 迭代器遍历之后还能变回ArrayList吗?遍历之后还能让指针指回开始的空吗?
2017-11-30 关于练习题,分享下代码
2017-11-30 分析下练习题思路
2017-11-11 使用Iterator在循环遍历时也可以进行删除操作
2017-10-15 更好的方法:从末位开始遍历
2017-08-01 站长大人,使用迭代器循环的时候,可以进行增删操作吧?
2017-05-15 我想到另一个方法
2017-03-22 迭代器while循环




提问之前请登陆
关于 JAVA 中级-集合框架-遍历 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 902680467
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
在已经存在的几千个提问里,有相当大的比例,是因为使用了和站长不同版本的开发环境导致的,比如 jdk, eclpise, idea, mysql,tomcat 等等软件的版本不一致。
请使用和站长一样的版本,可以节约自己大量的学习时间。 站长把教学中用的软件版本整理了,都统一放在了这里, 方便大家下载: http://how2j.cn/k/helloworld/helloworld-version/1718.html

上传截图