LinkedList类是双向列表,列表中的每个节点都包含了对前一个和后一个元素的引用.
LinkedList的构造函数如下
1. public LinkedList():  ——生成空的链表
2. public LinkedList(Collection col):  复制构造函数
1、获取链表的第一个和最后一个元素

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class LinkedListTest{
  3. public static void main(String[] args) {
  4. LinkedList<String> lList = new LinkedList<String>();
  5. lList.add("1");
  6. lList.add("2");
  7. lList.add("3");
  8. lList.add("4");
  9. lList.add("5");
  10. System.out.println("链表的第一个元素是 : " + lList.getFirst());
  11. System.out.println("链表最后一个元素是 : " + lList.getLast());
  12. }
  13. }

2、获取链表元素

[java] view plaincopy

 
  1. for (String str: lList) {
  2. System.out.println(str);
  3. }

3、从链表生成子表

[java] view plaincopy

 
  1. List subl = lList.subList(1, 4);
  2. System.out.println(subl);
  3. lst.remove(2);
  4. System.out.println(lst);
  5. System.out.println(lList);

4、添加元素:添加单个元素
 如果不指定索引的话,元素将被添加到链表的最后.
public boolean add(Object element)
public boolean add(int index, Object element)
也可以把链表当初栈或者队列来处理:
public boolean addFirst(Object element)
public boolean addLast(Object element)
addLast()方法和不带索引的add()方法实现的效果一样.

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class LinkedListTest{
  3. public static void main(String[] a) {
  4. LinkedList list = new LinkedList();
  5. list.add("A");
  6. list.add("B");
  7. list.add("C");
  8. list.add("D");
  9. list.addFirst("X");
  10. list.addLast("Z");
  11. System.out.println(list);
  12. }
  13. }

5、删除元素

[java] view plaincopy

 
  1. public Object removeFirst()
  2. public Object removeLast()
  3. import java.util.LinkedList;
  4. public class MainClass {
  5. public static void main(String[] a) {
  6. LinkedList list = new LinkedList();
  7. list.add("A");
  8. list.add("B");
  9. list.add("C");
  10. list.add("D");
  11. list.removeFirst();
  12. list.removeLast();
  13. System.out.println(list);
  14. }
  15. }

6、使用链表实现栈效果

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class MainClass {
  3. public static void main(String[] args) {
  4. StackL stack = new StackL();
  5. for (int i = 0; i < 10; i++)
  6. stack.push(i);
  7. System.out.println(stack.top());
  8. System.out.println(stack.top());
  9. System.out.println(stack.pop());
  10. System.out.println(stack.pop());
  11. System.out.println(stack.pop());
  12. }
  13. }
  14. class StackL {
  15. private LinkedList list = new LinkedList();
  16. public void push(Object v) {
  17. list.addFirst(v);
  18. }
  19. public Object top() {
  20. return list.getFirst();
  21. }
  22. public Object pop() {
  23. return list.removeFirst();
  24. }
  25. }

7、使用链表来实现队列效果

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class MainClass {
  3. public static void main(String[] args) {
  4. Queue queue = new Queue();
  5. for (int i = 0; i < 10; i++)
  6. queue.put(Integer.toString(i));
  7. while (!queue.isEmpty())
  8. System.out.println(queue.get());
  9. }
  10. }
  11. class Queue {
  12. private LinkedList list = new LinkedList();
  13. public void put(Object v) {
  14. list.addFirst(v);
  15. }
  16. public Object get() {
  17. return list.removeLast();
  18. }
  19. public boolean isEmpty() {
  20. return list.isEmpty();
  21. }
  22. }

8、将LinkedList转换成ArrayList

[java] view plaincopy

 
  1. ArrayList<String> arrayList = new ArrayList<String>(linkedList);
  2. for (String s : arrayList) {
  3. System.out.println("s = " + s);
  4. }

9、删掉所有元素:清空LinkedList
    lList.clear();
10、删除列表的首位元素

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class Main {
  3. public static void main(String[] args) {
  4. LinkedList<String> lList = new LinkedList<String>();
  5. lList.add("1");
  6. lList.add("2");
  7. lList.add("3");
  8. lList.add("4");
  9. lList.add("5");
  10. System.out.println(lList);
  11. //元素在删除的时候,仍然可以获取到元素
  12. Object object = lList.removeFirst();
  13. System.out.println(object + " has been removed");
  14. System.out.println(lList);
  15. object = lList.removeLast();
  16. System.out.println(object + " has been removed");
  17. System.out.println(lList);
  18. }
  19. }

11、根据范围删除列表元素

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class Main {
  3. public static void main(String[] args) {
  4. LinkedList<String> lList = new LinkedList<String>();
  5. lList.add("1");
  6. lList.add("2");
  7. lList.add("3");
  8. lList.add("4");
  9. lList.add("5");
  10. System.out.println(lList);
  11. lList.subList(2, 5).clear();
  12. System.out.println(lList);
  13. }
  14. }

12、删除链表的特定元素

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class Main {
  3. public static void main(String[] args) {
  4. LinkedList<String> lList = new LinkedList<String>();
  5. lList.add("1");
  6. lList.add("2");
  7. lList.add("3");
  8. lList.add("4");
  9. lList.add("5");
  10. System.out.println(lList);
  11. System.out.println(lList.remove("2"));//删除元素值=2的元素
  12. System.out.println(lList);
  13. Object obj = lList.remove(2);  //删除第二个元素
  14. System.out.println(obj + " 已经从链表删除");
  15. System.out.println(lList);
  16. }
  17. }

13、将LinkedList转换为数组,数组长度为0

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. import java.util.List;
  3. public class Main {
  4. public static void main(String[] args) {
  5. List<String> theList = new LinkedList<String>();
  6. theList.add("A");
  7. theList.add("B");
  8. theList.add("C");
  9. theList.add("D");
  10. String[] my = theList.toArray(new String[0]);
  11. for (int i = 0; i < my.length; i++) {
  12. System.out.println(my[i]);
  13. }
  14. }
  15. }

14、将LinkedList转换为数组,数组长度为链表长度

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. import java.util.List;
  3. public class Main {
  4. public static void main(String[] args) {
  5. List<String> theList = new LinkedList<String>();
  6. theList.add("A");
  7. theList.add("B");
  8. theList.add("C");
  9. theList.add("D");
  10. String[] my = theList.toArray(new String[theList.size()]);
  11. for (int i = 0; i < my.length; i++) {
  12. System.out.println(my[i]);
  13. }
  14. }
  15. }

15、将LinkedList转换成ArrayList

[java] view plaincopy

 
  1. import java.util.ArrayList;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. public class Main {
  5. public static void main(String[] args) {
  6. LinkedList<String> myQueue = new LinkedList<String>();
  7. myQueue.add("A");
  8. myQueue.add("B");
  9. myQueue.add("C");
  10. myQueue.add("D");
  11. List<String> myList = new ArrayList<String>(myQueue);
  12. for (Object theFruit : myList)
  13. System.out.println(theFruit);
  14. }
  15. }

16、实现栈

[java] view plaincopy

 
  1. import java.util.Collections;
  2. import java.util.LinkedList;
  3. public class Main {
  4. public static void main(String[] argv) throws Exception {
  5. LinkedList stack = new LinkedList();
  6. Object object = "";
  7. stack.addFirst(object);
  8. Object o = stack.getFirst();
  9. stack = (LinkedList) Collections.synchronizedList(stack);
  10. }
  11. }

17、实现队列

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class Main {
  3. public static void main(String[] argv) throws Exception {
  4. LinkedList queue = new LinkedList();
  5. Object object = "";
  6. // Add to end of queue
  7. queue.add(object);
  8. // Get head of queue
  9. Object o = queue.removeFirst();
  10. }
  11. }

18 、同步方法

[java] view plaincopy

 
  1. import java.util.Collections;
  2. import java.util.LinkedList;
  3. public class Main {
  4. public static void main(String[] argv) throws Exception {
  5. LinkedList queue = new LinkedList();
  6. Object object = "";
  7. queue.add(object);
  8. Object o = queue.removeFirst();
  9. queue = (LinkedList) Collections.synchronizedList(queue);
  10. }
  11. }

19、查找元素位置

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class Main {
  3. public static void main(String[] args) {
  4. LinkedList<String> lList = new LinkedList<String>();
  5. lList.add("1");
  6. lList.add("2");
  7. lList.add("3");
  8. lList.add("4");
  9. lList.add("5");
  10. lList.add("2");
  11. System.out.println(lList.indexOf("2"));
  12. System.out.println(lList.lastIndexOf("2"));
  13. }
  14. }

20、替换元素

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class Main {
  3. public static void main(String[] args) {
  4. LinkedList<String> lList = new LinkedList<String>();
  5. lList.add("1");
  6. lList.add("2");
  7. lList.add("3");
  8. lList.add("4");
  9. lList.add("5");
  10. System.out.println(lList);
  11. lList.set(3, "Replaced");//使用set方法替换元素,方法的第一个参数是元素索引,后一个是替换值
  12. System.out.println(lList);
  13. }
  14. }

21、链表添加对象

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. class Address {
  3. private String name;
  4. private String street;
  5. private String city;
  6. private String state;
  7. private String code;
  8. Address(String n, String s, String c, String st, String cd) {
  9. name = n;
  10. street = s;
  11. city = c;
  12. state = st;
  13. code = cd;
  14. }
  15. public String toString() {
  16. return name + " " + street + " " + city + " " + state + " " + code;
  17. }
  18. }
  19. class MailList {
  20. public static void main(String args[]) {
  21. LinkedList<Address> ml = new LinkedList<Address>();
  22. ml.add(new Address("A", "11 Ave", "U", "IL", "11111"));
  23. ml.add(new Address("R", "11 Lane", "M", "IL", "22222"));
  24. ml.add(new Address("T", "8 St", "C", "IL", "33333"));
  25. for (Address element : ml)
  26. System.out.println(element + "\n");
  27. }
  28. }

22、确认链表是否存在特定元素

[java] view plaincopy

 
  1. import java.util.LinkedList;
  2. public class Main {
  3. public static void main(String[] args) {
  4. LinkedList<String> lList = new LinkedList<String>();
  5. lList.add("1");
  6. lList.add("2");
  7. lList.add("3");
  8. lList.add("4");
  9. lList.add("5");
  10. if (lList.contains("4")) {
  11. System.out.println("LinkedList contains 4");
  12. } else {
  13. System.out.println("LinkedList does not contain 4");
  14. }
  15. }
  16. }

23、根据链表元素生成对象数组

[java] view plaincopy

 
  1. Object[] objArray = lList.toArray();
  2. for (Object obj: objArray) {
  3. System.out.println(obj);
  4. }

24、链表多线程

[java] view plaincopy

 
  1. import java.util.Collections;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. class PrepareProduction implements Runnable {
  5. private final List<String> queue;
  6. PrepareProduction(List<String> q) {
  7. queue = q;
  8. }
  9. public void run() {
  10. queue.add("1");
  11. queue.add("done");
  12. }
  13. }
  14. class DoProduction implements Runnable {
  15. private final List<String> queue;
  16. DoProduction(List<String> q) {
  17. queue = q;
  18. }
  19. public void run() {
  20. String value = queue.remove(0);
  21. while (!value.equals("*")) {
  22. System.out.println(value);
  23. value = queue.remove(0);
  24. }
  25. }
  26. }
  27. public class Main {
  28. public static void main(String[] args) throws Exception {
  29. List q = Collections.synchronizedList(new LinkedList<String>());
  30. Thread p1 = new Thread(new PrepareProduction(q));
  31. Thread c1 = new Thread(new DoProduction(q));
  32. p1.start();
  33. c1.start();
  34. p1.join();
  35. c1.join();
  36. }
  37. }

25、优先级链表(来自JBOSS)

[java] view plaincopy

 
  1. import java.util.ArrayList;
  2. import java.util.LinkedList;
  3. import java.util.List;
  4. import java.util.ListIterator;
  5. import java.util.NoSuchElementException;
  6. public class BasicPriorityLinkedList {
  7. protected LinkedList[] linkedLists;
  8. protected int priorities;
  9. protected int size;
  10. public BasicPriorityLinkedList(int priorities) {
  11. this.priorities = priorities;
  12. initDeques();
  13. }
  14. public void addFirst(Object obj, int priority) {
  15. linkedLists[priority].addFirst(obj);
  16. size++;
  17. }
  18. public void addLast(Object obj, int priority) {
  19. linkedLists[priority].addLast(obj);
  20. size++;
  21. }
  22. public Object removeFirst() {
  23. Object obj = null;
  24. for (int i = priorities - 1; i >= 0; i--) {
  25. LinkedList ll = linkedLists[i];
  26. if (!ll.isEmpty()) {
  27. obj = ll.removeFirst();
  28. break;
  29. }
  30. }
  31. if (obj != null) {
  32. size--;
  33. }
  34. return obj;
  35. }
  36. public Object removeLast() {
  37. Object obj = null;
  38. for (int i = 0; i < priorities; i++) {
  39. LinkedList ll = linkedLists[i];
  40. if (!ll.isEmpty()) {
  41. obj = ll.removeLast();
  42. }
  43. if (obj != null) {
  44. break;
  45. }
  46. }
  47. if (obj != null) {
  48. size--;
  49. }
  50. return obj;
  51. }
  52. public Object peekFirst() {
  53. Object obj = null;
  54. for (int i = priorities - 1; i >= 0; i--) {
  55. LinkedList ll = linkedLists[i];
  56. if (!ll.isEmpty()) {
  57. obj = ll.getFirst();
  58. }
  59. if (obj != null) {
  60. break;
  61. }
  62. }
  63. return obj;
  64. }
  65. public List getAll() {
  66. List all = new ArrayList();
  67. for (int i = priorities - 1; i >= 0; i--) {
  68. LinkedList deque = linkedLists[i];
  69. all.addAll(deque);
  70. }
  71. return all;
  72. }
  73. public void clear() {
  74. initDeques();
  75. }
  76. public int size() {
  77. return size;
  78. }
  79. public boolean isEmpty() {
  80. return size == 0;
  81. }
  82. public ListIterator iterator() {
  83. return new PriorityLinkedListIterator(linkedLists);
  84. }
  85. protected void initDeques() {
  86. linkedLists = new LinkedList[priorities];
  87. for (int i = 0; i < priorities; i++) {
  88. linkedLists[i] = new LinkedList();
  89. }
  90. size = 0;
  91. }
  92. class PriorityLinkedListIterator implements ListIterator {
  93. private LinkedList[] lists;
  94. private int index;
  95. private ListIterator currentIter;
  96. PriorityLinkedListIterator(LinkedList[] lists) {
  97. this.lists = lists;
  98. index = lists.length - 1;
  99. currentIter = lists[index].listIterator();
  100. }
  101. public void add(Object arg0) {
  102. throw new UnsupportedOperationException();
  103. }
  104. public boolean hasNext() {
  105. if (currentIter.hasNext()) {
  106. return true;
  107. }
  108. while (index >= 0) {
  109. if (index == 0 || currentIter.hasNext()) {
  110. break;
  111. }
  112. index--;
  113. currentIter = lists[index].listIterator();
  114. }
  115. return currentIter.hasNext();
  116. }
  117. public boolean hasPrevious() {
  118. throw new UnsupportedOperationException();
  119. }
  120. public Object next() {
  121. if (!hasNext()) {
  122. throw new NoSuchElementException();
  123. }
  124. return currentIter.next();
  125. }
  126. public int nextIndex() {
  127. throw new UnsupportedOperationException();
  128. }
  129. public Object previous() {
  130. throw new UnsupportedOperationException();
  131. }
  132. public int previousIndex() {
  133. throw new UnsupportedOperationException();
  134. }
  135. public void remove() {
  136. currentIter.remove();
  137. size--;
  138. }
  139. public void set(Object obj) {
  140. throw new UnsupportedOperationException();
  141. }
  142. }
  143. }

26、生成list的帮助类(来自google)

[java] view plaincopy

 
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.LinkedList;
  4. import java.util.List;
  5. public class Lists {
  6. private Lists() { }
  7. public static <E> ArrayList<E> newArrayList() {
  8. return new ArrayList<E>();
  9. }
  10. public static <E> ArrayList<E> newArrayListWithCapacity(int initialCapacity) {
  11. return new ArrayList<E>(initialCapacity);
  12. }
  13. public static <E> ArrayList<E> newArrayList(E... elements) {
  14. ArrayList<E> set = newArrayList();
  15. Collections.addAll(set, elements);
  16. return set;
  17. }
  18. public static <E> ArrayList<E> newArrayList(Iterable<? extends E> elements) {
  19. ArrayList<E> list = newArrayList();
  20. for(E e : elements) {
  21. list.add(e);
  22. }
  23. return list;
  24. }
  25. public static <E> LinkedList<E> newLinkedList() {
  26. return new LinkedList<E>();
  27. }
  28. }

LinkedList链式集合的更多相关文章

  1. Java实现链式存储的二叉查找树(递归方法)

    二叉查找树的定义: 二叉查找树或者是一颗空树,或者是一颗具有以下特性的非空二叉树: 1. 若左子树非空,则左子树上所有节点关键字值均小于根节点的关键字: 2. 若右子树非空,则右子树上所有节点关键字值 ...

  2. 如何写 JS 的链式调用 ---》JS 设计模式《----方法的链式调用

    1.以$ 函数为例.通常返回一个HTML元素或一个元素集合. 代码如下: function $(){ var elements = []; ;i<arguments.length;i++){ v ...

  3. C#中扩展StringBuilder支持链式方法

    本篇体验扩展StringBuilder使之支持链式方法. 这里有一个根据键值集合生成select元素的方法. private static string BuilderSelectBox(IDicti ...

  4. 数据结构Java实现07----队列:顺序队列&顺序循环队列、链式队列、顺序优先队列

    一.队列的概念: 队列(简称作队,Queue)也是一种特殊的线性表,队列的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置插入和删除,而队列只允许在其一端进行插入操作在其 ...

  5. 数据结构Java实现05----栈:顺序栈和链式堆栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

  6. 单元最短路径算法模板汇总(Dijkstra, BF,SPFA),附链式前向星模板

    一:dijkstra算法时间复杂度,用优先级队列优化的话,O((M+N)logN)求单源最短路径,要求所有边的权值非负.若图中出现权值为负的边,Dijkstra算法就会失效,求出的最短路径就可能是错的 ...

  7. jQuery编程基础精华01(jQuery简介,顶级对象$,jQuery对象、Dom对象,链式编程,选择器)

    jQuery简介 什么是jQuery? jQuery就是一个JavaScript函数库,没什么特别的.(开源)联想SQLHelper类 jQuery能做什么?jQuery是做什么的? jQuery本身 ...

  8. [置顶] ※数据结构※→☆线性表结构(queue)☆============优先队列 链式存储结构(queue priority list)(十二)

    优先队列(priority queue) 普通的队列是一种先进先出的数据结构,元素在队列尾追加,而从队列头删除.在优先队列中,元素被赋予优先级.当访问元素时,具有最高优先级的元素最先删除.优先队列具有 ...

  9. jQuery链式编程

    链式编程 多行代码合并成一行代码,前提要认清此行代码返回的是不是对象.是对象才能进行链式编程 .html(‘val’).text(‘val’).css()链式编程,隐式迭代 链式编程注意:$(‘div ...

随机推荐

  1. 将PostGIS转化为GeoJSON

    #!/usr/bin/env python # -*- coding: utf-8 -*- import psycopg2 import json from geojson import loads, ...

  2. ORA-00054:资源正忙,但指定以nowait方式

    PL/SQL执行SQL脚本文件,报错如下: 百度寻找答案,认为是被锁了. select session_id from v$locked_object; 结果没有任何数据.   后来把PL/SQL关闭 ...

  3. vncserver安装

    我的环境是centos6.5,如果没有安装桌面,先执行: # yum groupinstall "X Window System" "Desktop" # yu ...

  4. Xcode常用快捷键

    1. 文件CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD+OPt+S:保存所有文件CMD + SHIFT + S: 另存为CMD + ...

  5. spring理解

    Struts与Hibernate可以做什么事? Struts,Mvc中控制层解决方案,可以进行请求数据自动封装.类型转换.文件上传.效验… Hibernate,持久层的解决方案:可以做到,把对象保存到 ...

  6. 【代码笔记】iOS-淡出淡入效果

    一,效果图. 二,工程图. 三,代码. ViewController.h #import <UIKit/UIKit.h> @interface ViewController : UIVie ...

  7. iOS 上传新版本到AppStore时报错ITMS-90034

    今天打包新版本上传到AppStore时报错 ERROR ITMS-90034:"Missing or invalid signature.The bundle'com.xxx.xxx' at ...

  8. Photo Shop切图

    切图之前 哪些是需要切出来的? 修饰性的 (一般用在background属性) 图标.logo 有特殊效果的按钮  文字等 非纯色的背景 内容性的 (一般用在img标签) Banner.广告图片 文章 ...

  9. 旧项目如何切换到Entity Framework Code First

    Entity Framework Code First固然是好东西,然而如果是已经存在的旧有项目,如何简单方便的使用切换呢? 这里介绍一个VS的插件Entity Framework Power Too ...

  10. ASP.NET MVC 在控制器中获取某个视图动态的HTML代码

    如果我们需要动态的用AJAX从服务器端获取HTML代码,拼接字符串是一种不好的方式,所以我们将HTML代码写在cshtml文件中,然后通过代码传入model,动态获取cshtml中的HTML代码 当然 ...