`
chensl
  • 浏览: 57954 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Collection之链表

 
阅读更多

在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次: [新值, 李四, 王五]

分享到:
评论

相关推荐

    java基础知识Collection之链表讲解和练习.rar

    Java中的Collection接口是所有集合类的父接口,它定义了各种类型的集合,包括链表、集合并集等等。在这个资源中,主要讲解和练习Java中链表的实现和使用。 LinkedList类是Java中实现链表的一种常见方式。LinkedList...

    数组、单链表和双链表介绍以及双向链表的CC++Java实现 数组和链表.pdf

    C语言的实现需要手动实现双链表的操作,而C++和Java语言则提供了STL和Collection集合来实现双链表。 在C语言中,双链表的实现需要定义双链表的结构体,包括头节点和结点结构体。然后,需要实现双链表的基本操作,...

    小型通讯录程序c语言链表实现(源代码)

    7. **gcc编译器**:GCC(GNU Compiler Collection)是GNU项目的一部分,包括C、C++、Objective-C、Fortran、Ada和Go等多种编程语言的编译器。在这个项目中,gcc用于将C语言源代码编译成可执行文件。 8. **编程实践*...

    我自己java数据结构之链表

    `List`接口扩展了`Collection`接口,并规定元素是有序的,可以有重复。 接下来,我们谈谈`Iterator`。在Java中,`Iterator`是用于遍历集合的接口,提供了`hasNext()`和`next()`两个主要方法。`hasNext()`检查集合中...

    数组和链表——精选推荐 数组和链表.pdf

    在Java中,Collection集合中提供了ArrayList和Vector用于数组这种数据结构的实现。 二、链表 链表是另一种常见的线性数据结构,链表由节点组成,每个节点都包含下一个节点的指针。链表有单向链表和双向链表两种。 ...

    实现泛型类集合 实现双向链表

    本话题将探讨如何实现一个泛型类集合,特别是实现一个双向链表,并提供相关的方法,如求表长度。 首先,让我们理解什么是泛型类。泛型类是含有类型参数的类,它可以在创建对象时指定具体的类型,从而在编译时期就能...

    java集合框架之Collection实例解析

    - `LinkedList`:基于双向链表实现,插入和删除速度快,但随机访问速度慢,因为需要遍历链表。 2. **Set接口**:`Set`接口同样继承自`Collection`,但不允许元素重复。`HashSet`和`TreeSet`是`Set`接口的主要实现...

    Collection,List,Set和_Map用法和区别

    Collection, List, Set 和 Map 用法和区别 Collection 是 Java 中的一种对象集合,提供了许多有用的方法来操作集合元素,例如添加、删除、遍历等。Collection 是一个接口,下面有两个子接口:List 和 Set。 List ...

    Java集合类(Collection)学习

    `ArrayList`基于数组实现,提供快速随机访问,而`LinkedList`基于双向链表,适合频繁插入和删除。在本示例中的`ArraylistDome`可能是一个包含`ArrayList`使用的示例代码。 `Set`接口也是`Collection`的子接口,它不...

    Collection使用

    - **List**:允许重复元素,保持元素的插入顺序,具体实现有ArrayList(基于数组)和LinkedList(基于链表)。 - **Set**:不允许重复元素,不保证元素的顺序,主要实现有HashSet(基于哈希表,不保证顺序)和...

    java Collection类整理

    Java集合框架中的`Collection`接口是所有单值容器的基础接口,它定义了基本的增删查改元素的方法。`Collection`有两个主要的子接口:`List`和`Set`。`List`接口要求元素保持特定的顺序,并允许重复元素;而`Set`接口...

    Collection List Set Map 区别记忆

    而`LinkedList`基于双向链表,插入和删除速度快,但随机访问性能较差。 `Set`接口同样继承自`Collection`,但不允许元素重复。`Set`接口的实现类有`HashSet`、`TreeSet`等。`HashSet`是基于哈希表的,插入和查找...

    集合(Collection)文档

    `Collection`接口是Java集合框架中最基本的接口之一,它提供了存储、检索、修改以及操作元素集合的基本方法。以下列举了`Collection`接口中定义的一些关键方法: 1. **添加方法**: - `boolean add(Object obj)`: ...

    Collection、Map、List、Set、Iterator

    - **定义**:`Collection` 是 Java 集合框架的核心接口之一,几乎所有其他集合接口都直接或间接继承自它。它提供了对集合进行增删查改的基本操作。 - **基本方法**: - `add(E e)`:向集合中添加一个元素。 - `...

    Java集合Collection、List、Set、Map使用详解

    LinkedList基于双向链表,插入和删除速度快,但随机访问效率低。 ### Set Set接口同样继承自Collection,不允许元素重复。HashSet和TreeSet是最常见的Set实现。HashSet基于哈希表,不保证元素顺序;TreeSet使用...

    浅谈Collection

    ### 数据结构概述 数据结构是计算机科学中一个重要的概念,它是用来组织和管理数据的方式,以便于高效地访问和修改这些数据。数据结构的选择对于算法的性能有着直接的...选择合适的数据结构是优化程序性能的关键之一。

    collection集合类

    `Collection`集合类是Java集合框架的核心组成部分之一,主要用于存储和管理各种类型的对象。根据不同的需求和场景,`Collection`接口被细分为多个子接口和实现类,如`List`、`Set`、`Map`等。这些集合类型各自有着...

    线性表,链表,哈希表

    `List`接口是`Collection`接口的一个子接口,它提供了一种有序集合的形式。`List`支持重复元素,并且可以通过索引来访问元素,类似于数组。`List`接口中包含了各种操作列表的方法,如添加、删除、获取等。 #### `...

    集合 Collection

    Java集合框架(Collection Framework)是Java编程语言中一个重要的组成部分,它为开发者提供了多种数据结构,以便更加高效、灵活地管理对象集合。Java集合框架主要包括三种类型的集合:List、Set和Map。此外,它还...

Global site tag (gtag.js) - Google Analytics