热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

集合的遍历方式及其局限性

本文介绍了Java中集合的遍历方式,重点介绍了for-each语句的用法和优势。同时指出了for-each语句无法引用数组或集合的索引的局限性。通过示例代码展示了for-each语句的使用方法,并提供了改写为for语句版本的方法。

for-each语句

for-each语句是java5的新特征之一,在遍历数组、集合方面,for-each为开发人员提供了极大的方便。
for-each语句是for语句的特殊简化版本,但是for-each语句并不能完全取代for语句,然而,任何的for-each语句都可以改写为for语句版本。

for-each的语句格式:
for(元素类型type 元素变量value : 遍历对象obj){
引用了x的Java语句;
}

public void ArrayTest(){int arr[] = {1,2,3,4,5,6};for (int x : arr){System.out.println("遍历后的数组为:"+arr[x]);}}

局限性
如果要引用数组或者集合的索引,则foreach语句无法做到,foreach仅仅老老实实地遍历数组或者集合一遍

public class TestArray2 { public static void main(String args[]) { //定义一个一维数组 int arr[] = new int[4]; System.out.println("----未赋值前输出刚刚定义的数组----"); for (int x : arr) { System.out.println(x); } //通过索引给数组元素赋值 System.out.println("----通过循环变量给数组元素赋值----"); for (int i = 3; i > 0; i--) { arr[i] = i; } //循环输出创建的数组 System.out.println("----赋值后,foreach输出创建好的数组----"); for (int x : arr) { System.out.println(x); } }
}

在这里插入图片描述


迭代器

迭代器是一种模式、详细可见其设计模式,可以使得序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部

Java中的Iterator功能比较简单,并且只能单向移动:

(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

(2) 使用next()获得序列中的下一个元素。

(3) 使用hasNext()检查序列中是否还有元素。

(4) 使用remove()将迭代器新返回的元素删除。

Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

获取一个迭代器:

// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;public class RunoobTest {public static void main(String[] args) {// 创建集合ArrayList<String> sites &#61; new ArrayList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");sites.add("Zhihu");// 获取迭代器Iterator<String> it &#61; sites.iterator();// 输出集合中的第一个元素System.out.println(it.next());}
}

循环集合元素&#xff1a;

// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;public class RunoobTest {public static void main(String[] args) {// 创建集合ArrayList<String> sites &#61; new ArrayList<String>();sites.add("Google");sites.add("Runoob");sites.add("Taobao");sites.add("Zhihu");// 获取迭代器Iterator<String> it &#61; sites.iterator();// 输出集合中的所有元素while(it.hasNext()) {System.out.println(it.next());}}
}

删除元素&#xff1a;

// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;public class RunoobTest {public static void main(String[] args) {ArrayList<Integer> numbers &#61; new ArrayList<Integer>();numbers.add(12);numbers.add(8);numbers.add(2);numbers.add(23);Iterator<Integer> it &#61; numbers.iterator();while(it.hasNext()) {Integer i &#61; it.next();if(i < 10) { it.remove(); // 删除小于 10 的元素}}System.out.println(numbers);}
}

推荐阅读
author-avatar
小雨闹不住
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有