JAVA的集合迭代器

菜鸡小白为了巩固才写的。

一、数据集合的三种主要操作

1. 遍历集合中的所有元素

2. 按照内容在集合中查找对象

3. 向集合中插入、删除和修改对象
这里要讲的集合迭代器就是用来遍历集合的。

二、集合的遍历操作

最常用的一种集合操作是遍历操作,也就是一个一个地逐个访问集合中的所有元素。

  1. 诸如数组、ArrayList等对象集合,支持传统的for循环。
  2. JDK为各种集合遍历提供了另一种“通用”的方式——迭代器对象Iterator),为了简化其代码编写,JDK 5(及以上版本)提供了foreach循环来遍历集合。(Iterator可以适用于所有的集合。Java的foreach循环,其实就是通过Iterator实现的

三、使用迭代器遍历集合

所有实现了Collection接口的集合 对象,都提供了一个iterator()方法, 以获取一个iterator对象

Iterator<E>接口定义了3个方法:

public Iterator<E> {
boolean hasNext (); // 是否还有下一个元素
E next ();
// 获取下一个元素
void remove (); // 移除 iterator 返回的上一个元素
}

 

实现了 Iterator<E> 接口的对象称为“ 迭代 ”,使用它可以遍历集合。

示例(只有迭代器)

package iterator;

import java.util.*;

public class TestIterator {
    public static void main(String[] args) {
        //创建一个集合
        Collection<String> books = new HashSet<>();
        books.add("One book");
        books.add("Two book");
        books.add("Three book");
        //获取books集合对应的迭代器
        Iterator<String> it = books.iterator();
        //使用迭代器遍历集合
        while (it.hasNext()) {
            String book = (String) it.next();
            System.out.println(book);
        }
        System.out.println("集合中的元素为:" + books);
        it = books.iterator();
        //在迭代的过程中同时加工每个元素
        it.forEachRemaining(book->{
            System.out.println(book.toUpperCase());
        } );
    }
}

对代码的解释:

  1. Iterator<String> it = books.iterator();这句话以后,it指向books集合的开头(在第一个元素之前,并不指向第一个元素)。
  2. it.hasNext()用来判断是否还有下一个元素,第一次调用的时候,下一个元素是"One book"且存在,所以进入while循。
  3. it.next()这句代码的返回值是E,在该代码中E是String,所以it.next()会在将it往后移的同时返回下一个值的内容,在第一次调用的时候,it开始指向"One Book",并将"One Book"返回给book。
  4. forEachRemaining是Iterator接口中的一个默认方法,它接受一个 Consumer 类型的参数(一个函数式接口),用于处理迭代器中当前指针位置之后的所有剩余元素。
  5. book->{System.out.println(book.toUpperCase());}是一个Lambda表达式。由于forEachRemaining接受的参数是一个函数式接口,而函数式接口是利用Lambda所实现的,所以这里面就是一串Lambda表达式。一个形参,没有return的Lambda表达式。
  6. toUpperCase:将字符串转换为大写字母,book.toUpperCase()会有一个返回值,返回值就是全部是大写英文字母的字符串.

四、集合的ForEach遍历

        JDK 5以后,Collection接口派生自Iterable,因此JDK中内置的 所有 集合都可以使用新的foreach语句完成遍历工作。
        示例
package iterator;

import java.util.*;


public class TestForeach {
    public static void main(String[] args) {
        //创建一个集合
        Collection<String> books = new HashSet<String>();
        books.add("One book");
        books.add("Two book");
        books.add("Three book");
        for (var book : books) {
            System.out.println(book);
        }
        System.out.println(books);
        //使用Lambda表达式特性(方法引用)可以方便地遍历集合
        books.forEach(System.out::println);


    }
    
}

       for (var book : books) {
            System.out.println(book);
        }这就是一段foreach循环

books.forEach(System.out::println):集合对象有一个forEach()方法,它可以接收一个Lambda表达式,可用于遍历集合元素,它与foreach循环不是一回事,foreach循环是一种语法特性,forEach则是JDK为集合类型提供的一个方法。

五、遍历时删除元素的正确方法(利用迭代器)(不建议遍历时删除元素)

package iterator;

import java.util.*;


public class TestIteratorSucceed {
	public static void main(String[] args) {
		//创建一个集合
		Collection<String> books = new HashSet<>();
		books.add("One book");
		books.add("Two book");
		books.add("Three book");

		//获取books集合对应的迭代器
		Iterator<String> it = books.iterator();
		while(it.hasNext())	{
			String book = it.next();
			System.out.println(book);
			if (book.equals("One book")) {
				//使用Iterator迭代过程中,通过它来移除集合元素是安全的
				it.remove();
			}
		}
		System.out.println("移除元素之后:"+books);
	}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值