LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.
LinkedList的构造函数如下
1. public LinkedList(): ————生成空的链表
2. public LinkedList(Collection col): 复制构造函数
我们可以使用LinkedList的indexOf()或者lastIndexOf()方法来查找元素(遇到第一个匹配的元素即停止搜索,同时返回该元素的索引。所以,当LinkedList中有两个同样的元素的时候,使用这两个方法只会返回第一个匹配的元素)。虽然LinkedList不像ArrayList一样支持随机搜索(random search),但是我们仍可以遍历整个线性表,查找需要的元素。
java.util.LinkedList是双向链表的实现,因此有两个可以用来进行查找操作,分别是:
indexOf()表示从线性表的头部开始搜索,当找到第一个匹配的元素后就停止搜索并返回匹配的元素的索引
lastIndexOf()表示从线性表的尾部开始搜索,当找到第一个匹配的元素后就停止搜索并返回匹配的元素的索引。
它们的索引值都是以头部为起点开始计算的,所以对于LinkedList中同一个的元素,使用indexOf()和lastIndexOf()两个方法返回的值是一样的。如果LinkedList中有两个一样的元素,则使用lastIndexOf()和indexOf()返回的结果肯定是不同的。正如前面所说的,LinkedList并不支持随机搜索,要搜索一个元素需要遍历整个List,这意味这查找的时间复杂度(time complexity)是O(n)。
下面是LinkedList的结构描述:
linked+list+daa+structure+in+Java
代码实例:
import java.util.LinkedList;
/**
* Java Program to search an element inside LinkedList.
* LinkedList doesn't provide random search and
* time complexity of searching is O(n)
*
* @author java67
*/
public class LinkedListSearch {
public static void main(String args[]) {
LinkedList
ints.add(1001);
ints.add(1002);
ints.add(1003);
ints.add(1004);
ints.add(1005);
ints.add(1003);
// let's search a duplicate element in linked list
// for duplicate elements indexOf() and lastIndexOf() will
// return different indexes.
System.out.println("First index of 1003 is : " + ints.indexOf(1003));
System.out.println("Last index of 1003 is : " + ints.lastIndexOf(1003));
// let's search an element which is not appeared twice
// for unique elements both indexOf() and lastIndexOf() will return
// same position
System.out.println("First index of 1002 is : " + ints.indexOf(1002));
System.out.println("Last index of 1002 is : " + ints.lastIndexOf(1002));
}
}
Output :
First index of 1003 is : 2
Last index of 1003 is : 5
First index of 1002 is : 1
Last index of 1002 is : 1