在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接口是所有集合类的父接口,它定义了各种类型的集合,包括链表、集合并集等等。在这个资源中,主要讲解和练习Java中链表的实现和使用。 LinkedList类是Java中实现链表的一种常见方式。LinkedList...
C语言的实现需要手动实现双链表的操作,而C++和Java语言则提供了STL和Collection集合来实现双链表。 在C语言中,双链表的实现需要定义双链表的结构体,包括头节点和结点结构体。然后,需要实现双链表的基本操作,...
7. **gcc编译器**:GCC(GNU Compiler Collection)是GNU项目的一部分,包括C、C++、Objective-C、Fortran、Ada和Go等多种编程语言的编译器。在这个项目中,gcc用于将C语言源代码编译成可执行文件。 8. **编程实践*...
`List`接口扩展了`Collection`接口,并规定元素是有序的,可以有重复。 接下来,我们谈谈`Iterator`。在Java中,`Iterator`是用于遍历集合的接口,提供了`hasNext()`和`next()`两个主要方法。`hasNext()`检查集合中...
在Java中,Collection集合中提供了ArrayList和Vector用于数组这种数据结构的实现。 二、链表 链表是另一种常见的线性数据结构,链表由节点组成,每个节点都包含下一个节点的指针。链表有单向链表和双向链表两种。 ...
本话题将探讨如何实现一个泛型类集合,特别是实现一个双向链表,并提供相关的方法,如求表长度。 首先,让我们理解什么是泛型类。泛型类是含有类型参数的类,它可以在创建对象时指定具体的类型,从而在编译时期就能...
- `LinkedList`:基于双向链表实现,插入和删除速度快,但随机访问速度慢,因为需要遍历链表。 2. **Set接口**:`Set`接口同样继承自`Collection`,但不允许元素重复。`HashSet`和`TreeSet`是`Set`接口的主要实现...
Collection, List, Set 和 Map 用法和区别 Collection 是 Java 中的一种对象集合,提供了许多有用的方法来操作集合元素,例如添加、删除、遍历等。Collection 是一个接口,下面有两个子接口:List 和 Set。 List ...
`ArrayList`基于数组实现,提供快速随机访问,而`LinkedList`基于双向链表,适合频繁插入和删除。在本示例中的`ArraylistDome`可能是一个包含`ArrayList`使用的示例代码。 `Set`接口也是`Collection`的子接口,它不...
- **List**:允许重复元素,保持元素的插入顺序,具体实现有ArrayList(基于数组)和LinkedList(基于链表)。 - **Set**:不允许重复元素,不保证元素的顺序,主要实现有HashSet(基于哈希表,不保证顺序)和...
Java集合框架中的`Collection`接口是所有单值容器的基础接口,它定义了基本的增删查改元素的方法。`Collection`有两个主要的子接口:`List`和`Set`。`List`接口要求元素保持特定的顺序,并允许重复元素;而`Set`接口...
而`LinkedList`基于双向链表,插入和删除速度快,但随机访问性能较差。 `Set`接口同样继承自`Collection`,但不允许元素重复。`Set`接口的实现类有`HashSet`、`TreeSet`等。`HashSet`是基于哈希表的,插入和查找...
`Collection`接口是Java集合框架中最基本的接口之一,它提供了存储、检索、修改以及操作元素集合的基本方法。以下列举了`Collection`接口中定义的一些关键方法: 1. **添加方法**: - `boolean add(Object obj)`: ...
- **定义**:`Collection` 是 Java 集合框架的核心接口之一,几乎所有其他集合接口都直接或间接继承自它。它提供了对集合进行增删查改的基本操作。 - **基本方法**: - `add(E e)`:向集合中添加一个元素。 - `...
LinkedList基于双向链表,插入和删除速度快,但随机访问效率低。 ### Set Set接口同样继承自Collection,不允许元素重复。HashSet和TreeSet是最常见的Set实现。HashSet基于哈希表,不保证元素顺序;TreeSet使用...
### 数据结构概述 数据结构是计算机科学中一个重要的概念,它是用来组织和管理数据的方式,以便于高效地访问和修改这些数据。数据结构的选择对于算法的性能有着直接的...选择合适的数据结构是优化程序性能的关键之一。
`Collection`集合类是Java集合框架的核心组成部分之一,主要用于存储和管理各种类型的对象。根据不同的需求和场景,`Collection`接口被细分为多个子接口和实现类,如`List`、`Set`、`Map`等。这些集合类型各自有着...
`List`接口是`Collection`接口的一个子接口,它提供了一种有序集合的形式。`List`支持重复元素,并且可以通过索引来访问元素,类似于数组。`List`接口中包含了各种操作列表的方法,如添加、删除、获取等。 #### `...
Java集合框架(Collection Framework)是Java编程语言中一个重要的组成部分,它为开发者提供了多种数据结构,以便更加高效、灵活地管理对象集合。Java集合框架主要包括三种类型的集合:List、Set和Map。此外,它还...