Iterable 接口:用于实现迭代功能的基础接口,它提供了一种统一的方式来遍历集合中的元素

Iterable 接口位于 java.lang 包中。它是 Java 集合框架的核心接口之一,其定义为 interface Iterable<T>。这个接口是 Java 中用于实现迭代功能的基础接口,它提供了一种统一的方式来遍历集合中的元素。

Iterable 接口位于 java.lang 包中。它是 Java 集合框架的核心接口之一,其定义为 interface Iterable<T>。这个接口是 Java 中用于实现迭代功能的基础接口,它提供了一种统一的方式来遍历集合中的元素。

任何实现了 Iterable 接口的类都可以使用增强型 for 循环(for-each 循环)进行遍历。该接口只有一个方法 iterator(),这个方法返回一个 Iterator 类型的对象,Iterator 对象用于定义访问和遍历元素的具体方式。

接口方法

Iterable 接口中的方法:

Iterator<T> iterator()

这个方法用于返回一个实现了 Iterator 接口的对象,该对象定义了如何逐个访问集合中的元素。

示例:自定义可迭代类

首先,我们创建一个简单的自定义类来实现 Iterable 接口。假设我们有一个名为 MyList 的类,它内部使用一个数组来存储元素。

package com.hxstrive.java_lang.iterable;

import java.util.Iterator;

/**
* 自定义List
* @author hxstrive
*/
public class MyList<T> implements Iterable<T> {
   T[] elements;
   
   public MyList(T[] elements) {
       this.elements = elements;
   }
   
   @Override
   public Iterator<T> iterator() {
       return new MyListIterator<T>(this);
   }

}

上面的 MyList 类实现了 Iterable 接口,它的 iterator() 方法返回一个自定义的 MyListIterator 对象(下面会定义)。这个 MyListIterator 对象将用于遍历 MyList 中的元素。

自定义迭代器实现

Iterator 接口与 Iterable 接口配合使用

Iterator 接口也位于 java.lang 包中,它用于定义迭代的具体行为。它有三个主要方法:

  • hasNext() 用于检查是否还有下一个元素

  • next() 用于返回下一个元素

  • remove() 用于从集合中移除当前元素(可选操作)

实现 MyListIterator 类

package com.hxstrive.java_lang.iterable;

import java.util.Iterator;

/**
* 自定义的迭代器
* @author hxstrive
*/
class MyListIterator<T> implements Iterator<T> {
   private MyList<T> myList;
   private int currentIndex = 0;
   
   public MyListIterator(MyList<T> myList) {
       this.myList = myList;
   }
   
   @Override
   public boolean hasNext() {
       return currentIndex < myList.elements.length;
   }
   
   @Override
   public T next() {
       T element = myList.elements[currentIndex];
       currentIndex++;
       return element;
   }
   
   @Override
   public void remove() {
       // 为了简单起见,这里暂不实现移除功能
       throw new UnsupportedOperationException("remove operation not supported");
   }
}

在这个 MyListIterator 类中,hasNext() 方法通过检查当前索引是否小于数组长度来判断是否还有下一个元素。next() 方法返回当前索引位置的元素,并将索引递增。remove() 方法在这里抛出一个不支持操作的异常,因为我们暂时不实现元素移除功能。

使用示例

使用增强型 for 循环遍历自定义的 MyList 类收起java

package com.hxstrive.java_lang.iterable;

/**
* Iterable 示例
* @author hxstrive
*/
public class IterableDemo {
   
   public static void main(String[] args) {
       Integer[] numbers = {1, 2, 3, 4, 5};
       MyList<Integer> myList = new MyList<>(numbers);
       for (Integer number : myList) {
           System.out.println(number);
       }
   }
   
}

在这个示例中,我们首先创建了一个 Integer 数组,然后使用这个数组创建了一个 MyList 对象。由于MyList 实现了 Iterable 接口,我们可以使用增强型 for 循环来遍历 MyList 中的元素。在循环内部,每个元素都会被打印出来。

在 Java 集合框架中的应用

在 Java 集合框架中,许多集合类(如 ArrayList、LinkedList、HashSet、TreeSet 等)都实现了 Iterable 接口。这使得我们可以方便地使用增强型for循环来遍历这些集合中的元素。

例如,对于ArrayList:

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

public class IterableDemo2 {
   public static void main(String[] args) {
       List<String> list = new ArrayList<>();
       list.add("apple");
       list.add("banana");
       list.add("cherry");
       for (String fruit : list) {
           System.out.println(fruit);
       }
   }
}

这里 ArrayList 实现了 Iterable 接口,所以可以使用增强型 for 循环来遍历其中的元素,这种方式使得代码更加简洁和易读。

人生就像赛跑,不在乎你是否第一个到达终点,而在乎你有没有跑完全程。
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号