LinkedList是什么?
LinkedList是一种数据结构,它由节点组成,每个节点包含一个值和一个指向下一个节点的指针。这种数据结构非常适合插入和删除操作,因为它们只涉及相邻节点的更改。LinkedList常用于实现栈、队列和线性列表等数据结构。在Java中,LinkedList是一个类,实现了List接口,可用于在链表中存储和操作对象。
LinkedList的使用
创建对象
使用LinkedList类的语法格式如下:
import java.util.LinkedList;
LinkedList<String> list = new LinkedList<String>();
在上述代码中,我们首先通过 import 语句引入了 java.util 包中的 LinkedList 类。然后我们声明了一个名为 list 的 LinkedList 对象,这个对象可以存储字符串类型的数据。
如果需要存储其他类型的数据,只需要将 String
替换成相应的数据类型即可。例如,如果要存储整数类型的数据,代码如下:
LinkedList<Integer> list = new LinkedList<Integer>();
添加元素
下面是Java语言的示例代码,演示如何向LinkedList中添加元素:
import java.util.LinkedList;
public class Example {
public static void main(String[] args) {
LinkedList<String> linkedList = new LinkedList<>();
// 添加元素
linkedList.add("Java");
linkedList.add("Python");
linkedList.add("C++");
// 输出LinkedList中所有元素
System.out.println(linkedList);
// 在指定位置添加元素
linkedList.add(1, "Ruby");
// 输出LinkedList中所有元素
System.out.println(linkedList);
}
}
在上面的代码示例中,首先创建了一个空的LinkedList对象,然后通过调用add()方法,向其添加了三个元素。接着调用 System.out.println(linkedList);语句,输出LinkedList中所有元素,结果为:
[Java, Python, C++]
接着调用linkedList.add(1, “Ruby”);,在LinkedList的第二个位置(索引值为1)添加了一个新的元素"Ruby"。最后再次调用System.out.println(linkedList);输出新的LinkedList中所有元素,结果为:
[Java, Ruby, Python, C++]
删除元素
可以使用LinkedList类中的remove()方法来删除元素。该方法有两种用法:
- remove(int index): 删除指定index位置上的元素。
- remove(Object obj): 删除第一个找到的obj对象。
示例代码:
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("apple");
list.add("banana");
list.add("orange");
System.out.println(list);
// remove the element at index 1
list.remove(1);
System.out.println(list);
// remove the first occurrence of "orange"
list.remove("orange");
System.out.println(list);
}
}
输出:
[apple, banana, orange]
[apple, orange]
[apple]
注意:当使用remove(int index)方法时,如果给定的index超出了链表的范围,将会抛出IndexOutOfBoundsException异常。
获取长度
可以通过LinkedList的size()方法获取LinkedList的长度,如下所示:
LinkedList list = new LinkedList();
int length = list.size();
以上代码将创建一个空的LinkedList,然后使用size()方法获取该LinkedList的长度,将其存储在一个整数变量length中。
如果LinkedList已经包含一些元素,则可以直接使用size()方法获取其长度。例如:
LinkedList list = new LinkedList();
list.add("A");
list.add("B");
list.add("C");
int length = list.size();
以上代码将创建一个LinkedList,向其中添加三个字符串元素,然后使用size()方法获取该LinkedList的长度,将其存储在一个整数变量length中。
排序
Java LinkedList排序的代码示例:
import java.util.Collections;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(4);
list.add(2);
list.add(8);
list.add(5);
Collections.sort(list); // 对LinkedList进行排序
System.out.println(list); // 输出排序结果 [2, 4, 5, 8]
}
}
在上述示例中,我们首先创建了一个LinkedList,并向其添加了一些Integer类型的元素。然后,我们调用Collections.sort()方法对该LinkedList进行排序,最后输出排序结果。可以看到,排序结果是升序排列的。
如果要对LinkedList进行降序排列,则可以使用Collections.reverseOrder()方法,如下所示:
import java.util.Collections;
import java.util.LinkedList;
public class Main {
public static void main(String[] args) {
LinkedList<Integer> list = new LinkedList<>();
list.add(4);
list.add(2);
list.add(8);
list.add(5);
Collections.sort(list, Collections.reverseOrder()); // 对LinkedList进行降序排序
System.out.println(list); // 输出排序结果 [8, 5, 4, 2]
}
}
在这个示例中,我们将Collections.sort()方法的第二个参数设置为Collections.reverseOrder(),以对LinkedList进行降序排列。最后输出排序结果,可以看到结果是降序排列的。
常用方法
- add():在链表的末尾添加一个元素。
- addFirst(E element): 在链表的头部添加一个元素。
- addLast(E element): 在链表的尾部添加一个元素。
- add(int index, E element): 在指定的位置插入一个元素。
- removeFirst(): 移除链表的第一个元素。
- removeLast(): 移除链表的最后一个元素。
- remove(int index): 移除指定位置的元素。
- get(int index): 获取指定位置的元素。
- set(int index, E element): 将指定位置的元素替换为新元素。
- size(): 返回链表中元素的数量。
- clear(): 移除链表中所有的元素。
- indexOf():返回元素第一次出现的索引位置,如果没有则返回-1。
- isEmpty(): 判断链表是否为空。
- contains():判断链表中是否包含指定元素。
- peek(): 获取链表的头部元素,但不会移除它。
- poll(): 移除链表的头部元素,并返回该元素。
- offer(E element): 将元素添加到链表的末尾,相当于addLast方法。
- iterator(): 返回一个迭代器,可以用来遍历链表中的元素。