Skip to content

Commit 8950ab5

Browse files
authored
更改目录显示
1 parent a11fb66 commit 8950ab5

File tree

1 file changed

+128
-131
lines changed

1 file changed

+128
-131
lines changed

Java相关/LinkedList.md

Lines changed: 128 additions & 131 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,20 @@
1-
<a href="#1" target="_self">0-1. 简介</a>
21

3-
<a href="#2" target="_self">0-2. 内部结构分析</a>
2+
<!-- MarkdownTOC -->
43

5-
<a href="#3" target="_self">0-3. LinkedList源码分析</a>
4+
- [简介](#简介)
5+
- [内部结构分析](#内部结构分析)
6+
- [LinkedList源码分析](#linkedlist源码分析)
7+
- [构造方法](#构造方法)
8+
- [添加(add)方法](#添加(add)方法)
9+
- [根据位置取数据的方法](#根据位置取数据的方法)
10+
- [根据对象得到索引的方法](#根据对象得到索引的方法)
11+
- [检查链表是否包含某对象的方法:](#检查链表是否包含某对象的方法:)
12+
- [删除(remove/pop)方法](#删除(removepop)方法)
13+
- [LinkedList类常用方法测试:](#linkedlist类常用方法测试:)
614

7-
  <a href="#3.1" target="_self">0-3-1. 构造方法</a>
15+
<!-- /MarkdownTOC -->
816

9-
  <a href="#3.2" target="_self">0-3-2. 添加add方法</a>
10-
11-
  <a href="#3.3" target="_self">0-3-3. 根据位置取数据的方法</a>
12-
13-
  <a href="#3.4" target="_self">0-3-4. 根据对象得到索引的方法</a>
14-
15-
  <a href="#3.5" target="_self">0-3-5. 检查链表是否包含某对象的方法</a>
16-
17-
  <a href="#3.6" target="_self">0-3-6. 删除removepop方法</a>
18-
19-
<a href="#4" target="_self">0-4. LinkedList类常用方法</a>
20-
## <font face="楷体" id="1"> 简介</font>
17+
## <font face="楷体" id="1">简介</font>
2118
<font color="red">LinkedList</font>是一个实现了<font color="red">List接口</font>和<font color="red">Deque接口</font>的<font color="red">双端链表</font>。
2219
LinkedList底层的链表结构使它<font color="red">支持高效的插入和删除操作</font>,另外它实现了Deque接口,使得LinkedList类也具有队列的特性;
2320
LinkedList<font color="red">不是线程安全的</font>,如果想使LinkedList变成线程安全的,可以调用静态类<font color="red">Collections类</font>中的<font color="red">synchronizedList</font>方法:
@@ -43,7 +40,7 @@ private static class Node<E> {
4340
```
4441
这个类就代表双端链表的节点Node。这个类有三个属性,分别是前驱节点,本节点的值,后继结点。
4542

46-
## <font face="楷体" id="3"> LinkedList源码分析</font>
43+
## <font face="楷体" id="3">LinkedList源码分析</font>
4744
### <font face="楷体" id="3.1">构造方法</font>
4845
**空构造方法:**
4946
```java
@@ -291,7 +288,7 @@ public int lastIndexOf(Object o) {
291288
return indexOf(o) != -1;
292289
}
293290
```
294-
###<font face="楷体" id="3.6"> 删除(remove/pop)方法</font>
291+
###<font face="楷体" id="3.6">删除(remove/pop)方法</font>
295292
**remove()** ,**removeFirst(),pop():** 删除头节点
296293
```
297294
public E pop() {
@@ -400,119 +397,119 @@ import java.util.Iterator;
400397
import java.util.LinkedList;
401398

402399
public class LinkedListDemo {
403-
public static void main(String[] srgs) {
404-
//创建存放int类型的linkedList
405-
LinkedList<Integer> linkedList = new LinkedList<>();
406-
/************************** linkedList的基本操作 ************************/
407-
linkedList.addFirst(0); // 添加元素到列表开头
408-
linkedList.add(1); // 在列表结尾添加元素
409-
linkedList.add(2, 2); // 在指定位置添加元素
410-
linkedList.addLast(3); // 添加元素到列表结尾
400+
public static void main(String[] srgs) {
401+
//创建存放int类型的linkedList
402+
LinkedList<Integer> linkedList = new LinkedList<>();
403+
/************************** linkedList的基本操作 ************************/
404+
linkedList.addFirst(0); // 添加元素到列表开头
405+
linkedList.add(1); // 在列表结尾添加元素
406+
linkedList.add(2, 2); // 在指定位置添加元素
407+
linkedList.addLast(3); // 添加元素到列表结尾
411408

412-
System.out.println("LinkedList(直接输出的): " + linkedList);
413-
414-
System.out.println("getFirst()获得第一个元素: " + linkedList.getFirst()); // 返回此列表的第一个元素
415-
System.out.println("getLast()获得第最后一个元素: " + linkedList.getLast()); // 返回此列表的最后一个元素
416-
System.out.println("removeFirst()删除第一个元素并返回: " + linkedList.removeFirst()); // 移除并返回此列表的第一个元素
417-
System.out.println("removeLast()删除最后一个元素并返回: " + linkedList.removeLast()); // 移除并返回此列表的最后一个元素
418-
System.out.println("After remove:" + linkedList);
419-
System.out.println("contains()方法判断列表是否包含1这个元素:" + linkedList.contains(1)); // 判断此列表包含指定元素,如果是,则返回true
420-
System.out.println("该linkedList的大小 : " + linkedList.size()); // 返回此列表的元素个数
421-
422-
/************************** 位置访问操作 ************************/
423-
System.out.println("-----------------------------------------");
424-
linkedList.set(1, 3); // 将此列表中指定位置的元素替换为指定的元素
425-
System.out.println("After set(1, 3):" + linkedList);
426-
System.out.println("get(1)获得指定位置(这里为1)的元素: " + linkedList.get(1)); // 返回此列表中指定位置处的元素
427-
428-
/************************** Search操作 ************************/
429-
System.out.println("-----------------------------------------");
430-
linkedList.add(3);
431-
System.out.println("indexOf(3): " + linkedList.indexOf(3)); // 返回此列表中首次出现的指定元素的索引
432-
System.out.println("lastIndexOf(3): " + linkedList.lastIndexOf(3));// 返回此列表中最后出现的指定元素的索引
433-
434-
/************************** Queue操作 ************************/
435-
System.out.println("-----------------------------------------");
436-
System.out.println("peek(): " + linkedList.peek()); // 获取但不移除此列表的头
437-
System.out.println("element(): " + linkedList.element()); // 获取但不移除此列表的头
438-
linkedList.poll(); // 获取并移除此列表的头
439-
System.out.println("After poll():" + linkedList);
440-
linkedList.remove();
441-
System.out.println("After remove():" + linkedList); // 获取并移除此列表的头
442-
linkedList.offer(4);
443-
System.out.println("After offer(4):" + linkedList); // 将指定元素添加到此列表的末尾
444-
445-
/************************** Deque操作 ************************/
446-
System.out.println("-----------------------------------------");
447-
linkedList.offerFirst(2); // 在此列表的开头插入指定的元素
448-
System.out.println("After offerFirst(2):" + linkedList);
449-
linkedList.offerLast(5); // 在此列表末尾插入指定的元素
450-
System.out.println("After offerLast(5):" + linkedList);
451-
System.out.println("peekFirst(): " + linkedList.peekFirst()); // 获取但不移除此列表的第一个元素
452-
System.out.println("peekLast(): " + linkedList.peekLast()); // 获取但不移除此列表的第一个元素
453-
linkedList.pollFirst(); // 获取并移除此列表的第一个元素
454-
System.out.println("After pollFirst():" + linkedList);
455-
linkedList.pollLast(); // 获取并移除此列表的最后一个元素
456-
System.out.println("After pollLast():" + linkedList);
457-
linkedList.push(2); // 将元素推入此列表所表示的堆栈(插入到列表的头)
458-
System.out.println("After push(2):" + linkedList);
459-
linkedList.pop(); // 从此列表所表示的堆栈处弹出一个元素(获取并移除列表第一个元素)
460-
System.out.println("After pop():" + linkedList);
461-
linkedList.add(3);
462-
linkedList.removeFirstOccurrence(3); // 从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表)
463-
System.out.println("After removeFirstOccurrence(3):" + linkedList);
464-
linkedList.removeLastOccurrence(3); // 从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表)
465-
System.out.println("After removeFirstOccurrence(3):" + linkedList);
466-
467-
/************************** 遍历操作 ************************/
468-
System.out.println("-----------------------------------------");
469-
linkedList.clear();
470-
for (int i = 0; i < 100000; i++) {
471-
linkedList.add(i);
472-
}
473-
// 迭代器遍历
474-
long start = System.currentTimeMillis();
475-
Iterator<Integer> iterator = linkedList.iterator();
476-
while (iterator.hasNext()) {
477-
iterator.next();
478-
}
479-
long end = System.currentTimeMillis();
480-
System.out.println("Iterator:" + (end - start) + " ms");
481-
482-
// 顺序遍历(随机遍历)
483-
start = System.currentTimeMillis();
484-
for (int i = 0; i < linkedList.size(); i++) {
485-
linkedList.get(i);
486-
}
487-
end = System.currentTimeMillis();
488-
System.out.println("for:" + (end - start) + " ms");
489-
490-
// 另一种for循环遍历
491-
start = System.currentTimeMillis();
492-
for (Integer i : linkedList)
493-
;
494-
end = System.currentTimeMillis();
495-
System.out.println("for2:" + (end - start) + " ms");
496-
497-
// 通过pollFirst()或pollLast()来遍历LinkedList
498-
LinkedList<Integer> temp1 = new LinkedList<>();
499-
temp1.addAll(linkedList);
500-
start = System.currentTimeMillis();
501-
while (temp1.size() != 0) {
502-
temp1.pollFirst();
503-
}
504-
end = System.currentTimeMillis();
505-
System.out.println("pollFirst()或pollLast():" + (end - start) + " ms");
506-
507-
// 通过removeFirst()或removeLast()来遍历LinkedList
508-
LinkedList<Integer> temp2 = new LinkedList<>();
509-
temp2.addAll(linkedList);
510-
start = System.currentTimeMillis();
511-
while (temp2.size() != 0) {
512-
temp2.removeFirst();
513-
}
514-
end = System.currentTimeMillis();
515-
System.out.println("removeFirst()或removeLast():" + (end - start) + " ms");
516-
}
409+
System.out.println("LinkedList(直接输出的): " + linkedList);
410+
411+
System.out.println("getFirst()获得第一个元素: " + linkedList.getFirst()); // 返回此列表的第一个元素
412+
System.out.println("getLast()获得第最后一个元素: " + linkedList.getLast()); // 返回此列表的最后一个元素
413+
System.out.println("removeFirst()删除第一个元素并返回: " + linkedList.removeFirst()); // 移除并返回此列表的第一个元素
414+
System.out.println("removeLast()删除最后一个元素并返回: " + linkedList.removeLast()); // 移除并返回此列表的最后一个元素
415+
System.out.println("After remove:" + linkedList);
416+
System.out.println("contains()方法判断列表是否包含1这个元素:" + linkedList.contains(1)); // 判断此列表包含指定元素,如果是,则返回true
417+
System.out.println("该linkedList的大小 : " + linkedList.size()); // 返回此列表的元素个数
418+
419+
/************************** 位置访问操作 ************************/
420+
System.out.println("-----------------------------------------");
421+
linkedList.set(1, 3); // 将此列表中指定位置的元素替换为指定的元素
422+
System.out.println("After set(1, 3):" + linkedList);
423+
System.out.println("get(1)获得指定位置(这里为1)的元素: " + linkedList.get(1)); // 返回此列表中指定位置处的元素
424+
425+
/************************** Search操作 ************************/
426+
System.out.println("-----------------------------------------");
427+
linkedList.add(3);
428+
System.out.println("indexOf(3): " + linkedList.indexOf(3)); // 返回此列表中首次出现的指定元素的索引
429+
System.out.println("lastIndexOf(3): " + linkedList.lastIndexOf(3));// 返回此列表中最后出现的指定元素的索引
430+
431+
/************************** Queue操作 ************************/
432+
System.out.println("-----------------------------------------");
433+
System.out.println("peek(): " + linkedList.peek()); // 获取但不移除此列表的头
434+
System.out.println("element(): " + linkedList.element()); // 获取但不移除此列表的头
435+
linkedList.poll(); // 获取并移除此列表的头
436+
System.out.println("After poll():" + linkedList);
437+
linkedList.remove();
438+
System.out.println("After remove():" + linkedList); // 获取并移除此列表的头
439+
linkedList.offer(4);
440+
System.out.println("After offer(4):" + linkedList); // 将指定元素添加到此列表的末尾
441+
442+
/************************** Deque操作 ************************/
443+
System.out.println("-----------------------------------------");
444+
linkedList.offerFirst(2); // 在此列表的开头插入指定的元素
445+
System.out.println("After offerFirst(2):" + linkedList);
446+
linkedList.offerLast(5); // 在此列表末尾插入指定的元素
447+
System.out.println("After offerLast(5):" + linkedList);
448+
System.out.println("peekFirst(): " + linkedList.peekFirst()); // 获取但不移除此列表的第一个元素
449+
System.out.println("peekLast(): " + linkedList.peekLast()); // 获取但不移除此列表的第一个元素
450+
linkedList.pollFirst(); // 获取并移除此列表的第一个元素
451+
System.out.println("After pollFirst():" + linkedList);
452+
linkedList.pollLast(); // 获取并移除此列表的最后一个元素
453+
System.out.println("After pollLast():" + linkedList);
454+
linkedList.push(2); // 将元素推入此列表所表示的堆栈(插入到列表的头)
455+
System.out.println("After push(2):" + linkedList);
456+
linkedList.pop(); // 从此列表所表示的堆栈处弹出一个元素(获取并移除列表第一个元素)
457+
System.out.println("After pop():" + linkedList);
458+
linkedList.add(3);
459+
linkedList.removeFirstOccurrence(3); // 从此列表中移除第一次出现的指定元素(从头部到尾部遍历列表)
460+
System.out.println("After removeFirstOccurrence(3):" + linkedList);
461+
linkedList.removeLastOccurrence(3); // 从此列表中移除最后一次出现的指定元素(从头部到尾部遍历列表)
462+
System.out.println("After removeFirstOccurrence(3):" + linkedList);
463+
464+
/************************** 遍历操作 ************************/
465+
System.out.println("-----------------------------------------");
466+
linkedList.clear();
467+
for (int i = 0; i < 100000; i++) {
468+
linkedList.add(i);
469+
}
470+
// 迭代器遍历
471+
long start = System.currentTimeMillis();
472+
Iterator<Integer> iterator = linkedList.iterator();
473+
while (iterator.hasNext()) {
474+
iterator.next();
475+
}
476+
long end = System.currentTimeMillis();
477+
System.out.println("Iterator:" + (end - start) + " ms");
478+
479+
// 顺序遍历(随机遍历)
480+
start = System.currentTimeMillis();
481+
for (int i = 0; i < linkedList.size(); i++) {
482+
linkedList.get(i);
483+
}
484+
end = System.currentTimeMillis();
485+
System.out.println("for:" + (end - start) + " ms");
486+
487+
// 另一种for循环遍历
488+
start = System.currentTimeMillis();
489+
for (Integer i : linkedList)
490+
;
491+
end = System.currentTimeMillis();
492+
System.out.println("for2:" + (end - start) + " ms");
493+
494+
// 通过pollFirst()或pollLast()来遍历LinkedList
495+
LinkedList<Integer> temp1 = new LinkedList<>();
496+
temp1.addAll(linkedList);
497+
start = System.currentTimeMillis();
498+
while (temp1.size() != 0) {
499+
temp1.pollFirst();
500+
}
501+
end = System.currentTimeMillis();
502+
System.out.println("pollFirst()或pollLast():" + (end - start) + " ms");
503+
504+
// 通过removeFirst()或removeLast()来遍历LinkedList
505+
LinkedList<Integer> temp2 = new LinkedList<>();
506+
temp2.addAll(linkedList);
507+
start = System.currentTimeMillis();
508+
while (temp2.size() != 0) {
509+
temp2.removeFirst();
510+
}
511+
end = System.currentTimeMillis();
512+
System.out.println("removeFirst()或removeLast():" + (end - start) + " ms");
513+
}
517514
}
518515
```

0 commit comments

Comments
 (0)