From 8950ab5a1157376c82f4b744b9779a074ca691e5 Mon Sep 17 00:00:00 2001 From: Snailclimb Date: Fri, 10 Aug 2018 07:44:19 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=9B=AE=E5=BD=95=E6=98=BE?= =?UTF-8?q?=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Java相关/LinkedList.md | 239 +++++++++++++++++++-------------------- 1 file changed, 118 insertions(+), 121 deletions(-) diff --git a/Java相关/LinkedList.md b/Java相关/LinkedList.md index b8ad683a..b3131dc2 100644 --- a/Java相关/LinkedList.md +++ b/Java相关/LinkedList.md @@ -1,23 +1,20 @@ -0-1. 简介 -0-2. 内部结构分析 + -0-3. LinkedList源码分析 +- [简介](#简介) +- [内部结构分析](#内部结构分析) +- [LinkedList源码分析](#linkedlist源码分析) + - [构造方法](#构造方法) + - [添加(add)方法](#添加(add)方法) + - [根据位置取数据的方法](#根据位置取数据的方法) + - [根据对象得到索引的方法](#根据对象得到索引的方法) + - [检查链表是否包含某对象的方法:](#检查链表是否包含某对象的方法:) + - [删除(remove/pop)方法](#删除(removepop)方法) +- [LinkedList类常用方法测试:](#linkedlist类常用方法测试:) -  0-3-1. 构造方法 + -  0-3-2. 添加add方法 - -  0-3-3. 根据位置取数据的方法 - -  0-3-4. 根据对象得到索引的方法 - -  0-3-5. 检查链表是否包含某对象的方法 - -  0-3-6. 删除removepop方法 - -0-4. LinkedList类常用方法 -## 简介 +## 简介 LinkedList是一个实现了List接口Deque接口双端链表。 LinkedList底层的链表结构使它支持高效的插入和删除操作,另外它实现了Deque接口,使得LinkedList类也具有队列的特性; LinkedList不是线程安全的,如果想使LinkedList变成线程安全的,可以调用静态类Collections类中的synchronizedList方法: @@ -43,7 +40,7 @@ private static class Node { ``` 这个类就代表双端链表的节点Node。这个类有三个属性,分别是前驱节点,本节点的值,后继结点。 -## LinkedList源码分析 +## LinkedList源码分析 ### 构造方法 **空构造方法:** ```java @@ -291,7 +288,7 @@ public int lastIndexOf(Object o) { return indexOf(o) != -1; } ``` -### 删除(remove/pop)方法 +###删除(remove/pop)方法 **remove()** ,**removeFirst(),pop():** 删除头节点 ``` public E pop() { @@ -400,119 +397,119 @@ import java.util.Iterator; import java.util.LinkedList; public class LinkedListDemo { - public static void main(String[] srgs) { - //创建存放int类型的linkedList - LinkedList linkedList = new LinkedList<>(); - /************************** linkedList的基本操作 ************************/ - linkedList.addFirst(0); // 添加元素到列表开头 - linkedList.add(1); // 在列表结尾添加元素 - linkedList.add(2, 2); // 在指定位置添加元素 - linkedList.addLast(3); // 添加元素到列表结尾 + public static void main(String[] srgs) { + //创建存放int类型的linkedList + LinkedList linkedList = new LinkedList<>(); + /************************** linkedList的基本操作 ************************/ + linkedList.addFirst(0); // 添加元素到列表开头 + linkedList.add(1); // 在列表结尾添加元素 + linkedList.add(2, 2); // 在指定位置添加元素 + linkedList.addLast(3); // 添加元素到列表结尾 - System.out.println("LinkedList(直接输出的): " + linkedList); + System.out.println("LinkedList(直接输出的): " + linkedList); - System.out.println("getFirst()获得第一个元素: " + linkedList.getFirst()); // 返回此列表的第一个元素 - System.out.println("getLast()获得第最后一个元素: " + linkedList.getLast()); // 返回此列表的最后一个元素 - System.out.println("removeFirst()删除第一个元素并返回: " + linkedList.removeFirst()); // 移除并返回此列表的第一个元素 - System.out.println("removeLast()删除最后一个元素并返回: " + linkedList.removeLast()); // 移除并返回此列表的最后一个元素 - System.out.println("After remove:" + linkedList); - System.out.println("contains()方法判断列表是否包含1这个元素:" + linkedList.contains(1)); // 判断此列表包含指定元素,如果是,则返回true - System.out.println("该linkedList的大小 : " + linkedList.size()); // 返回此列表的元素个数 + System.out.println("getFirst()获得第一个元素: " + linkedList.getFirst()); // 返回此列表的第一个元素 + System.out.println("getLast()获得第最后一个元素: " + linkedList.getLast()); // 返回此列表的最后一个元素 + System.out.println("removeFirst()删除第一个元素并返回: " + linkedList.removeFirst()); // 移除并返回此列表的第一个元素 + System.out.println("removeLast()删除最后一个元素并返回: " + linkedList.removeLast()); // 移除并返回此列表的最后一个元素 + System.out.println("After remove:" + linkedList); + System.out.println("contains()方法判断列表是否包含1这个元素:" + linkedList.contains(1)); // 判断此列表包含指定元素,如果是,则返回true + System.out.println("该linkedList的大小 : " + linkedList.size()); // 返回此列表的元素个数 - /************************** 位置访问操作 ************************/ - System.out.println("-----------------------------------------"); - linkedList.set(1, 3); // 将此列表中指定位置的元素替换为指定的元素 - System.out.println("After set(1, 3):" + linkedList); - System.out.println("get(1)获得指定位置(这里为1)的元素: " + linkedList.get(1)); // 返回此列表中指定位置处的元素 + /************************** 位置访问操作 ************************/ + System.out.println("-----------------------------------------"); + linkedList.set(1, 3); // 将此列表中指定位置的元素替换为指定的元素 + System.out.println("After set(1, 3):" + linkedList); + System.out.println("get(1)获得指定位置(这里为1)的元素: " + linkedList.get(1)); // 返回此列表中指定位置处的元素 - /************************** Search操作 ************************/ - System.out.println("-----------------------------------------"); - linkedList.add(3); - System.out.println("indexOf(3): " + linkedList.indexOf(3)); // 返回此列表中首次出现的指定元素的索引 - System.out.println("lastIndexOf(3): " + linkedList.lastIndexOf(3));// 返回此列表中最后出现的指定元素的索引 + /************************** Search操作 ************************/ + System.out.println("-----------------------------------------"); + linkedList.add(3); + System.out.println("indexOf(3): " + linkedList.indexOf(3)); // 返回此列表中首次出现的指定元素的索引 + System.out.println("lastIndexOf(3): " + linkedList.lastIndexOf(3));// 返回此列表中最后出现的指定元素的索引 - /************************** Queue操作 ************************/ - System.out.println("-----------------------------------------"); - System.out.println("peek(): " + linkedList.peek()); // 获取但不移除此列表的头 - System.out.println("element(): " + linkedList.element()); // 获取但不移除此列表的头 - linkedList.poll(); // 获取并移除此列表的头 - System.out.println("After poll():" + linkedList); - linkedList.remove(); - System.out.println("After remove():" + linkedList); // 获取并移除此列表的头 - linkedList.offer(4); - System.out.println("After offer(4):" + linkedList); // 将指定元素添加到此列表的末尾 + /************************** Queue操作 ************************/ + System.out.println("-----------------------------------------"); + System.out.println("peek(): " + linkedList.peek()); // 获取但不移除此列表的头 + System.out.println("element(): " + linkedList.element()); // 获取但不移除此列表的头 + linkedList.poll(); // 获取并移除此列表的头 + System.out.println("After poll():" + linkedList); + linkedList.remove(); + System.out.println("After remove():" + linkedList); // 获取并移除此列表的头 + linkedList.offer(4); + System.out.println("After offer(4):" + linkedList); // 将指定元素添加到此列表的末尾 - /************************** Deque操作 ************************/ - System.out.println("-----------------------------------------"); - linkedList.offerFirst(2); // 在此列表的开头插入指定的元素 - System.out.println("After offerFirst(2):" + linkedList); - linkedList.offerLast(5); // 在此列表末尾插入指定的元素 - System.out.println("After offerLast(5):" + linkedList); - System.out.println("peekFirst(): " + linkedList.peekFirst()); // 获取但不移除此列表的第一个元素 - System.out.println("peekLast(): " + linkedList.peekLast()); // 获取但不移除此列表的第一个元素 - linkedList.pollFirst(); // 获取并移除此列表的第一个元素 - System.out.println("After pollFirst():" + linkedList); - linkedList.pollLast(); // 获取并移除此列表的最后一个元素 - System.out.println("After pollLast():" + linkedList); - linkedList.push(2); // 将元素推入此列表所表示的堆栈(插入到列表的头) - System.out.println("After push(2):" + linkedList); - linkedList.pop(); // 从此列表所表示的堆栈处弹出一个元素(获取并移除列表第一个元素) - System.out.println("After pop():" + linkedList); - linkedList.add(3); - linkedList.removeFirstOccurrence(3); // 从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表) - System.out.println("After removeFirstOccurrence(3):" + linkedList); - linkedList.removeLastOccurrence(3); // 从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表) - System.out.println("After removeFirstOccurrence(3):" + linkedList); + /************************** Deque操作 ************************/ + System.out.println("-----------------------------------------"); + linkedList.offerFirst(2); // 在此列表的开头插入指定的元素 + System.out.println("After offerFirst(2):" + linkedList); + linkedList.offerLast(5); // 在此列表末尾插入指定的元素 + System.out.println("After offerLast(5):" + linkedList); + System.out.println("peekFirst(): " + linkedList.peekFirst()); // 获取但不移除此列表的第一个元素 + System.out.println("peekLast(): " + linkedList.peekLast()); // 获取但不移除此列表的第一个元素 + linkedList.pollFirst(); // 获取并移除此列表的第一个元素 + System.out.println("After pollFirst():" + linkedList); + linkedList.pollLast(); // 获取并移除此列表的最后一个元素 + System.out.println("After pollLast():" + linkedList); + linkedList.push(2); // 将元素推入此列表所表示的堆栈(插入到列表的头) + System.out.println("After push(2):" + linkedList); + linkedList.pop(); // 从此列表所表示的堆栈处弹出一个元素(获取并移除列表第一个元素) + System.out.println("After pop():" + linkedList); + linkedList.add(3); + linkedList.removeFirstOccurrence(3); // 从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表) + System.out.println("After removeFirstOccurrence(3):" + linkedList); + linkedList.removeLastOccurrence(3); // 从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表) + System.out.println("After removeFirstOccurrence(3):" + linkedList); - /************************** 遍历操作 ************************/ - System.out.println("-----------------------------------------"); - linkedList.clear(); - for (int i = 0; i < 100000; i++) { - linkedList.add(i); - } - // 迭代器遍历 - long start = System.currentTimeMillis(); - Iterator iterator = linkedList.iterator(); - while (iterator.hasNext()) { - iterator.next(); - } - long end = System.currentTimeMillis(); - System.out.println("Iterator:" + (end - start) + " ms"); + /************************** 遍历操作 ************************/ + System.out.println("-----------------------------------------"); + linkedList.clear(); + for (int i = 0; i < 100000; i++) { + linkedList.add(i); + } + // 迭代器遍历 + long start = System.currentTimeMillis(); + Iterator iterator = linkedList.iterator(); + while (iterator.hasNext()) { + iterator.next(); + } + long end = System.currentTimeMillis(); + System.out.println("Iterator:" + (end - start) + " ms"); - // 顺序遍历(随机遍历) - start = System.currentTimeMillis(); - for (int i = 0; i < linkedList.size(); i++) { - linkedList.get(i); - } - end = System.currentTimeMillis(); - System.out.println("for:" + (end - start) + " ms"); + // 顺序遍历(随机遍历) + start = System.currentTimeMillis(); + for (int i = 0; i < linkedList.size(); i++) { + linkedList.get(i); + } + end = System.currentTimeMillis(); + System.out.println("for:" + (end - start) + " ms"); - // 另一种for循环遍历 - start = System.currentTimeMillis(); - for (Integer i : linkedList) - ; - end = System.currentTimeMillis(); - System.out.println("for2:" + (end - start) + " ms"); + // 另一种for循环遍历 + start = System.currentTimeMillis(); + for (Integer i : linkedList) + ; + end = System.currentTimeMillis(); + System.out.println("for2:" + (end - start) + " ms"); - // 通过pollFirst()或pollLast()来遍历LinkedList - LinkedList temp1 = new LinkedList<>(); - temp1.addAll(linkedList); - start = System.currentTimeMillis(); - while (temp1.size() != 0) { - temp1.pollFirst(); - } - end = System.currentTimeMillis(); - System.out.println("pollFirst()或pollLast():" + (end - start) + " ms"); + // 通过pollFirst()或pollLast()来遍历LinkedList + LinkedList temp1 = new LinkedList<>(); + temp1.addAll(linkedList); + start = System.currentTimeMillis(); + while (temp1.size() != 0) { + temp1.pollFirst(); + } + end = System.currentTimeMillis(); + System.out.println("pollFirst()或pollLast():" + (end - start) + " ms"); - // 通过removeFirst()或removeLast()来遍历LinkedList - LinkedList temp2 = new LinkedList<>(); - temp2.addAll(linkedList); - start = System.currentTimeMillis(); - while (temp2.size() != 0) { - temp2.removeFirst(); - } - end = System.currentTimeMillis(); - System.out.println("removeFirst()或removeLast():" + (end - start) + " ms"); - } + // 通过removeFirst()或removeLast()来遍历LinkedList + LinkedList temp2 = new LinkedList<>(); + temp2.addAll(linkedList); + start = System.currentTimeMillis(); + while (temp2.size() != 0) { + temp2.removeFirst(); + } + end = System.currentTimeMillis(); + System.out.println("removeFirst()或removeLast():" + (end - start) + " ms"); + } } ```