ListIterator接口

本文通过具体实例演示了Java中ListIterator接口的使用方法,包括如何添加(add)、修改(set)和删除(remove)列表中的元素,并展示了如何利用ListIterator实现双向遍历。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.neutron.collection.iterator;

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

/**
 * ListIterator接口案例
 * @author zhanght
 *
 */
public class ListIteratorDemo {

	@SuppressWarnings({ "rawtypes", "unchecked" })
	public static void main(String[] args) {
		List list = new ArrayList();
		list.add("java");
		list.add("mysql");
		list.add("oracle");
		list.add("redis");
		list.add("mongodb");
		list.add(".net");
		list.add("html5");
		list.add("css");
		
		for(ListIterator iterator = list.listIterator(); iterator.hasNext();) {
			Object obj = iterator.next();
			if ("java".equals(obj)){
				iterator.add("vb");
			}
		}
		System.out.println("add list:" + list);
		// add list:[java, vb, mysql, oracle, redis, mongodb, .net, html5, css]
		// add的元素并没有放在list末尾,而是当前元素的后面
		
		for(ListIterator iterator = list.listIterator(); iterator.hasNext();) {
			Object obj = iterator.next();
			if ("html5".equals(obj)){
				iterator.set("html");
			}
		}
		System.out.println("set:" + list);
		// set:[java, vb, mysql, oracle, redis, mongodb, .net, html, css]
		
		for(ListIterator iterator = list.listIterator(); iterator.hasNext();) {
			Object obj = iterator.next();
			if ("mysql".equals(obj)){
				iterator.remove();
			}
		}
		System.out.println("remove:" + list);
		// remove:[java, vb, oracle, redis, mongodb, .net, html, css]
		
		int redisIndex = list.indexOf("redis");
		System.out.println("redisIndex = " + redisIndex);
		int mongodbIndex = list.lastIndexOf("mongodb");
		System.out.println("mongodbIndex = " + mongodbIndex);

		/*
		 * 纯粹从后向前遍历数据,目前无法拿到最后的指针。
		 * hasPrevious,和previous有些鸡肋的感觉。
		 */
		for(ListIterator iterator = list.listIterator(); iterator.hasPrevious();) {
			Object obj = iterator.previous();
			int index = iterator.previousIndex();
			System.out.println("value:" + obj + ",index:" + index);
		}
	}

}

/*
public interface ListIterator<E> extends Iterator<E> {
    boolean hasNext();
    E next();
    boolean hasPrevious();
    E previous();
    int nextIndex();
    int previousIndex();
    void remove();
    void set(E e);
    void add(E e);
}
*/

### ListIterator 接口的使用示例 以下是 `ListIterator` 接口的一个典型代码示例,展示了如何通过该接口遍历列表并执行一些基本操作: ```java import java.util.ArrayList; import java.util.List; import java.util.ListIterator; public class ListIteratorExample { public static void main(String[] args) { // 创建一个 ArrayList 并填充数据 List<String> list = new ArrayList<>(); list.add("Apple"); list.add("Banana"); list.add("Orange"); // 获取 ListIterator 实例 ListIterator<String> iterator = list.listIterator(); System.out.println("正向遍历:"); while (iterator.hasNext()) { String element = iterator.next(); System.out.println(element); // 修改当前元素 if ("Banana".equals(element)) { iterator.set("Grapes"); // 替换 Banana 为 Grapes } } System.out.println("\n反向遍历:"); while (iterator.hasPrevious()) { String element = iterator.previous(); System.out.println(element); } // 添加新元素到列表中间位置 int index = list.indexOf("Grapes"); if (index != -1) { ListIterator<String> addIterator = list.listIterator(index + 1); addIterator.add("Mango"); // 在 Grapes 后面添加 Mango } System.out.println("\n修改后的列表:"); for (String item : list) { System.out.println(item); } } } ``` #### 解析 - 上述代码演示了 `ListIterator` 的主要功能,包括前向和后向迭代、替换现有元素以及在指定位置插入新元素[^1]。 - 方法 `.next()` 和 `.hasNext()` 用于从前向后遍历列表;`.previous()` 和 `.hasPrevious()` 则允许从后向前遍历[^2]。 - 调用 `.set()` 可以更新最近由 `.next()` 或 `.previous()` 返回的元素[^3]。 ### 注意事项 虽然 `ListIterator` 提供了许多有用的功能,但它仅适用于基于 `List` 的集合类型(如 `ArrayList`, `LinkedList`),而不适用于其他类型的集合(如 `Set` 或 `Map`)。这是因为这些集合不维护顺序,因此无法支持双向迭代器。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值