LinkedList类是双向链表,链表中的每个节点都包含了对前一个和后一个元素的引用.
LinkedList的构造函数如下
1. public LinkedList(): ——生成空的链表
2. public LinkedList(Collection col): 复制构造函数
- 获取链表的第一个和最后一个元素
package com.test.string;
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> lList = new LinkedList<String>();
lList.add("1");
lList.add("2");
lList.add("3");
lList.add("4");
lList.add("5");
System.out.println("链表的第一个元素是 : " + lList.getFirst());
System.out.println("链表最后一个元素是 : " + lList.getLast());
}
}
链表的第一个元素是 : 1
链表最后一个元素是 : 5
- 从链表生成子表
package com.test.string;
import java.util.LinkedList;
import java.util.List;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> lList = new LinkedList<String>();
lList.add("1");
lList.add("2");
lList.add("3");
lList.add("4");
lList.add("5");
List<String> subl = lList.subList(1, 4);
System.out.println(subl);
lList.remove(2);
System.out.println(lList);
}
}
[2, 3, 4]
[1, 2, 4, 5]
- 添加元素:添加单个元素
如果不指定索引的话,元素将被添加到链表的最后.
public boolean add(Object element)
public boolean add(int index, Object element)
也可以把链表当初栈或者队列来处理:
public boolean addFirst(Object element)
public boolean addLast(Object element)
addLast()方法和不带索引的add()方法实现的效果一样.
package com.test.string;
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.addFirst("X");
list.addLast("Z");
System.out.println(list);
}
}
[X, A, B, C, D, Z]
- 删除元素
package com.test.string;
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<String>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.removeFirst();
list.removeLast();
System.out.println(list);
}
}
[B, C]
- 实现栈效果
package com.test.string;
import java.util.LinkedList;
public class StackL {
private LinkedList<Object> list = new LinkedList<Object>();
public void push(Object v) {
list.addFirst(v);
}
public Object top() {
return list.getFirst();
}
public Object pop() {
return list.removeFirst();
}
}
package com.test.string;
public class TestLinkedList {
public static void main(String[] args) {
StackL stack = new StackL();
for (int i = 0; i < 10; i++)
stack.push(i);
System.out.println(stack.top());
System.out.println(stack.top());
System.out.println(stack.pop());
System.out.println(stack.pop());
System.out.println(stack.pop());
}
}
9
9
9
8
7
- 实现队列效果
package com.test.string;
public class TestLinkedList {
public static void main(String[] args) {
Queue queue = new Queue();
for (int i = 0; i < 10; i++)
queue.put(Integer.toString(i));
while (!queue.isEmpty())
System.out.println(queue.get());
}
}
package com.test.string;
import java.util.LinkedList;
public class Queue {
private LinkedList list = new LinkedList();
public void put(Object v) {
list.addFirst(v);
}
public Object get() {
return list.removeLast();
}
public boolean isEmpty() {
return list.isEmpty();
}
}
0
1
2
3
4
5
6
7
8
9
- LinkedList转换成ArrayList
ArrayList<String> arrayList = new ArrayList<String>(linkedList);
for (String s : arrayList) {
System.out.println("s = " + s);
}
- 删掉所有元素:清空LinkedList
lList.clear();
- 删除列表的首位元素
package com.test.string;
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> lList = new LinkedList<String>();
lList.add("1");
lList.add("2");
lList.add("3");
lList.add("4");
lList.add("5");
System.out.println(lList);
//元素在删除的时候,仍然可以获取到元素
Object object = lList.removeFirst();
System.out.println(object + " has been removed");
System.out.println(lList);
object = lList.removeLast();
System.out.println(object + " has been removed");
System.out.println(lList);
}
}
[1, 2, 3, 4, 5]
1 has been removed
[2, 3, 4, 5]
5 has been removed
[2, 3, 4]
范围删除列表元素
package com.test.string;
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> lList = new LinkedList<String>();
lList.add("1");
lList.add("2");
lList.add("3");
lList.add("4");
lList.add("5");
System.out.println(lList);
lList.subList(2, 5).clear();
System.out.println(lList);
}
}
[1, 2, 3, 4, 5]
[1, 2]
- 删除链表的特定元素
package com.test.string;
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> lList = new LinkedList<String>();
lList.add("1");
lList.add("2");
lList.add("3");
lList.add("4");
lList.add("5");
System.out.println(lList);
System.out.println(lList.remove("2"));//删除元素值=2的元素
System.out.println(lList);
Object obj = lList.remove(2); //删除index=2的元素,即第三个元素
System.out.println(obj + " 已经从链表删除");
System.out.println(lList);
}
}
[1, 2, 3, 4, 5]
true
[1, 3, 4, 5]
4 已经从链表删除
[1, 3, 5]
- 将LinkedList转换为数组,数组长度为0
package com.test.string;
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> theList = new LinkedList<String>();
theList.add("A");
theList.add("B");
theList.add("C");
theList.add("D");
String[] my = theList.toArray(new String[0]);
System.out.println(my.length);
for (int i = 0; i < my.length; i++) {
System.out.println(my[i]);
}
}
}
4
A
B
C
D
- 将LinkedList转换为数组,数组长度为链表长度
package com.test.string;
import java.util.LinkedList;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> theList = new LinkedList<String>();
theList.add("A");
theList.add("B");
theList.add("C");
theList.add("D");
String[] my = theList.toArray(new String[theList.size()]);
System.out.println(my.length);
for (int i = 0; i < my.length; i++) {
System.out.println(my[i]);
}
}
}
4
A
B
C
D
- 将LinkedList转换成ArrayList
package com.test.string;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class TestLinkedList {
public static void main(String[] args) {
LinkedList<String> myQueue = new LinkedList<String>();
myQueue.add("A");
myQueue.add("B");
myQueue.add("C");
myQueue.add("D");
List<String> myList = new ArrayList<String>(myQueue);
for (Object theFruit : myList)
System.out.println(theFruit);
}
}
A
B
C
D
代码来源:http://blog.csdn.net/i_lovefish/article/details/8042883