Collection之链表

本文详细介绍了Java中链表的操作方法,包括如何使用List接口和Iterator接口进行元素添加、删除、访问等基本操作,以及如何利用ListIterator接口实现反向遍历和元素插入等功能。

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

在Java语言中,所有的链表都是双向链接的(doubly linked),每个节点存放着序列中下一个节点的引用以及指向前驱节点的引用(可以通过调用AbstractCollection类中的toString方法打印出链表中所有元素)

package com.chensl.collection;
import java.util.*;
public class LinkedListTest {
	/**
	 * 本程序演示链表操作
	 * @author chensl
	 * @since 2010-9-2
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> linkedList=new LinkedList<String>();//其中LinkedList 实现了List
		linkedList.add("张三");
		linkedList.add("李四");
		linkedList.add("王五");	
		Iterator<String> iter = linkedList.iterator();
		String first = iter.next(); //访问第一个元素
		String second = iter.next(); //访问第二个元素
		iter.remove();  //删除最后访问的元素
	}
}

 

 

在Iterator接口中没有add方法,集合类库提供了子接口ListIterator中包含add方法:

interface ListIterator<E> extends Iterator<E>
{
    void add(E element);         //与Collection.add不同,不返回boolean类型的值,而是假定添加操作总会改变链表
    ......
}

 

ListIterator接口有两个方法可以用来反向遍历链表,即:

E  previous()  

boolean   hasPrevious()

其中,previous()与next()方法一样, 返回被越过的对象。

LinkedList类的listIterator方法返回一个实现了ListIterator接口的迭代器对象,

ListIterator<String> iter = linkedList.listItertor();

 add方法在迭代器位置之前添加一个新对象,下面的代码将越过链表中的第一个元素,并在第二个元素之前添加“赵六”

    List<String> linkedList=new LinkedList<String>();//其中LinkedList 实现了List
    linkedList.add("张三");
    linkedList.add("李四");
    linkedList.add("王五");
    ListIterator<String> iter = linkedList.listIterator();
    iter.next();
    iter.add("赵六");

另外, set方法用一个新元素取代调用next和previous方法返回的上一个元素,例如,下面的代码将用一个新值取代链表的第一个元素:

ListIterator<String> iter3 = linkedList.listIterator();
	String oldValue = iter3.next();  //返回第一个元素
	iter3.set("新值");

 如果迭代器发现它的集合被另一个迭代器修改了,或者该集合被自身的方法修改了,就会抛出一个ConcurrentModificationException异常。

 

完整示例程序如下:

package com.chensl.collection;
import java.util.*;
public class LinkedListTest {
	/**
	 * 本程序演示链表操作
	 * @author chensl
	 * @since 2010-9-2
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		List<String> linkedList=new LinkedList<String>();//其中LinkedList 实现了List
		linkedList.add("张三");
		linkedList.add("李四");
		linkedList.add("王五");
		System.out.println("第1次: "+linkedList);
		ListIterator<String> iter = linkedList.listIterator();
		iter.next();
		iter.add("赵六");
		System.out.println("第2次: "+linkedList);
		Iterator<String> iter2 = linkedList.iterator();
		String first = iter2.next(); //访问第一个元素
		String second = iter2.next(); //访问第二个元素
		iter2.remove();  //删除最后访问的元素
		
		System.out.println("第3次: "+linkedList);
		ListIterator<String> iter3 = linkedList.listIterator();
		String oldValue = iter3.next();  //返回第一个元素
		iter3.set("新值");
		
		System.out.println("第4次: "+linkedList);
	}
}

 

结果输出如下:

 

第1次: [张三, 李四, 王五]
第2次: [张三, 赵六, 李四, 王五]
第3次: [张三, 李四, 王五]
第4次: [新值, 李四, 王五]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值