遍历ArrayList的三种方法

步骤 1 : 用for循环遍历

通过前面的学习,知道了可以用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);
} } }

步骤 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的初始化

无法得知当前是第几个元素了,当需要只打印单数元素的时候,就做不到了。 必须再自定下标变量。

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);
} } }

练习删除ArrayList中的数据

首先初始化一个Hero集合,里面放100个Hero对象,名称分别是从

hero 0

hero 1

hero 2

...

hero 99.

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

答案

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);
} }

不能够在使用Iterator和增强for循环遍历数据的同时,删除数据,否则会抛出ConcurrentModificationException

解决办法,是准备一个临时容器,专门用来保存需要删除的对象。 然后再删掉

Java自学-集合框架 遍历的更多相关文章

  1. Java自学-集合框架 HashSet

    Java集合框架 HashSet 示例 1 : 元素不能重复 Set中的元素,不能重复 package collection; import java.util.HashSet; public cla ...

  2. Java自学-集合框架 二叉树

    Java集合框架 二叉树 示例 1 : 二叉树概念 二叉树由各种节点组成 二叉树特点: 每个节点都可以有左子节点,右子节点 每一个节点都有一个值 package collection; public ...

  3. Java自学-集合框架 Collections

    Java集合框架 工具类Collections Collections是一个类,容器的工具类,就如同Arrays是数组的工具类 步骤 1 : 反转 reverse 使List中的数据发生翻转 pack ...

  4. Java自学-集合框架 Collection

    Java集合框架 Collection Collection是一个接口 步骤 1 : Collection Collection是 Set List Queue和 Deque的接口 Queue: 先进 ...

  5. Java自学-集合框架 HashMap

    Java集合框架 HashMap 示例 1 : HashMap的键值对 HashMap储存数据的方式是-- 键值对 package collection; import java.util.HashM ...

  6. Java自学-集合框架 LinkedList

    Java集合框架 LinkedList 序列分先进先出FIFO,先进后出FILO FIFO在Java中又叫Queue 队列 FILO在Java中又叫Stack 栈 示例 1 : LinkedList ...

  7. Java自学-集合框架 与数组的区别

    Java集合框架与数组的区别 示例 1 : 使用数组的局限性 如果要存放多个对象,可以使用数组,但是数组有局限性 比如 声明长度是10的数组 不用的数组就浪费了 超过10的个数,又放不下 //Test ...

  8. Java自学-集合框架 聚合操作

    聚合操作 步骤 1 : 聚合操作 JDK8之后,引入了对集合的聚合操作,可以非常容易的遍历,筛选,比较集合中的元素. 像这样: String name =heros .stream() .sorted ...

  9. Java自学-集合框架 hashCode原理

    Java hashCode原理 步骤 1 : List查找的低效率 假设在List中存放着无重复名称,没有顺序的2000000个Hero 要把名字叫做"hero 1000000"的 ...

随机推荐

  1. 1-函数返回值-return详解及应用-1

    return 返回值   可以是:数字.字符串.布尔.函数.对象(元素\[]\{}\null).未定义  <script> function fn1(){return 100;} aler ...

  2. iOS中的NSOperation线程

    1.除NSThread之外的第二种多线程的编程方法   2.采用NSOperation(线程操作,通常用他的子类)和NSOperationQueue(线程队列)搭配来做多线程开发,采用NSOperat ...

  3. 从0系统学 Android--1.1认识 Android

    一转眼工作也有几年的时间了,一直想沉下心来,再回过头来重新系统的学习一遍 Android.所以就有了这个读书笔记.俗话说温故而知新,下面就请大家再跟着我系统的学习一篇 Android 吧! 这一系列主 ...

  4. 【LeetCode】746. 使用最小花费爬楼梯

    使用最小花费爬楼梯 数组的每个索引做为一个阶梯,第 i个阶梯对应着一个非负数的体力花费值 cost[i](索引从0开始). 每当你爬上一个阶梯你都要花费对应的体力花费值,然后你可以选择继续爬一个阶梯或 ...

  5. 查找树ADT--二叉查找树

    二叉树的一个重要应用是它们在查找中的使用. 二叉查找树的性质:对于树中的每个节点X,它的左子树中所有项的值小于X中的项,而它的右子树中所有项的值大于X中的项.这意味着该树所有的元素可以用某种一致的方式 ...

  6. 免密码登录postgresql

    如果在当前shell 下,如果设定 export PGPASSWORD='postgres密码' 环境变量,可以不用每次执行sql 语句或者导入一个sql 文件都输入一次密码的麻烦了.

  7. svn 在Windows下用TortoiseSVN checkout 时报认证错误

    TortoiseSVN 第一次 checkout(检出)时,需要输入用户名密码,如果第一次你保存了你的用户名密码,那么这个检出的项目以后就会用这个用户名密码,如果你的密码改了之后,就会报一个认证错误的 ...

  8. 密度峰值聚类算法(DPC)

    密度峰值聚类算法(DPC) 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 简介 基于密度峰值的聚类算法全称为基于快速搜索和发现密度峰值的聚类算法(cl ...

  9. if选择结构

    if的语法规则: if(布尔表达式){java语句} //只有一个java语句的时候可以省略大括号不建议这么写但是别人写的代码能看懂 if的写法有4种: if(){} if(){}else{} if( ...

  10. TestNG参数化测试之Excel读取数据

    1.新建Excel文档,准备好测试数据 在当前工程的resources目录下,新建文件名为testdata的Excel文档 打开Excel,将当前sheet重命名为calculator,构造num1. ...