Explorar el Código

commit hashSet

zhangxiaoyu hace 3 años
padre
commit
27983a2f8c

+ 3 - 0
张晓宇日记/21-12月学习日志.md

@@ -61,3 +61,6 @@ public static void sortMaoPao(int[] ints, Comparator comparator) {
61 61
     transient Object[] elementData
62 62
 ```
63 63
 * 12-21 ArrayList源码分析 无参构造器创建使用ArrayList
64
+* 12-22 ArrayList源码分析,有参构造器(传入数值大小以及一个集合)、Vector源码分析 对比与ArrayList 的不同之处
65
+* 12-23 LinkedList双向链表模拟 自己建了一个Node类并进行操作、LinkedList源码追踪
66
+* 12-24-26 LinkedList源码分析,add,remove,set,size等操作方法,以及分析了List集合的选择、Set介绍,(无序(添加顺序与取出顺序不一致),没有索引(没有get方法),不能存放重复元素、取出的顺序是固定的)

+ 7 - 0
张晓宇日记/HashSet源码笔记.md

@@ -0,0 +1,7 @@
1
+* HashSet源码笔记
2
+```java
3
+    // 构造器
4
+    public HashSet() {
5
+        map = new HashMap<>();
6
+    }
7
+```

+ 95 - 0
张晓宇日记/LinkedList笔记.md

@@ -0,0 +1,95 @@
1
+* 自己写的一个Linked
2
+```java
3
+package collection_.list_.linkedList_;
4
+
5
+import java.util.LinkedList;
6
+
7
+/**
8
+ * 模拟一个简单的双向链表
9
+ */
10
+
11
+public class LinkedList01 {
12
+    public static void main(String[] args) {
13
+        Node node1 = new Node("1");
14
+        Node node2 = new Node("2");
15
+        Node node3 = new Node("3");
16
+        node1.next = node2;
17
+        node2.next = node3;
18
+        node2.pre = node1;
19
+        node3.pre = node2;
20
+        Node first = node1;
21
+        Node last = node3;
22
+        bianli1(first);
23
+        System.out.println("============");
24
+        // 遍历从尾到头
25
+        bianli2(last);
26
+        // 添加一个节点 在 1-2之间 1.5
27
+        Node node1_5 = new Node("1.5");
28
+        node1.next = node1_5;
29
+        node1_5.next = node2;
30
+        node2.pre = node1_5;
31
+        System.out.println("============");
32
+        bianli1(first);
33
+        // 删除一个节点 2
34
+        System.out.println("============");
35
+        removeNode(node1);
36
+        first = node1_5;
37
+        bianli1(first);
38
+
39
+    }
40
+    // 删除节点
41
+    private static void removeNode(Node removeNode) {
42
+        if(removeNode.next == null) {
43
+            // 最后一个
44
+            removeNode.pre.next = null;
45
+            return;
46
+        }
47
+        if(removeNode.pre == null) {
48
+            // 第一个
49
+            removeNode.next.pre = null;
50
+            return;
51
+        }
52
+        // 在中间 ①将上一个节点的next指向 removeNode 的后一个节点
53
+        removeNode.pre.next = removeNode.next;
54
+        // ② 将后一个节点的 pre 指向 removeNode的前一个节点
55
+        removeNode.next.pre = removeNode.pre;
56
+    }
57
+    private static void bianli1(Node first) {
58
+        // 遍历 从头到尾
59
+        while (true) {
60
+            if(first == null) {
61
+                break;
62
+            }
63
+            System.out.println(first);
64
+            // 将指针指向后面一位
65
+            first = first.next;
66
+        }
67
+    }
68
+    private static void bianli2(Node last) {
69
+        // 遍历 从尾到头
70
+        while (true) {
71
+            if(last == null) {
72
+                break;
73
+            }
74
+            System.out.println(last);
75
+            // 将指针指向后面一位
76
+            last = last.pre;
77
+        }
78
+    }
79
+}
80
+
81
+// 定义一个Node类,Node的对象则表示双向链表的一个节点
82
+class Node {
83
+    public Object item; //真正存放的数据
84
+    public Node pre; // 指向上一个节点
85
+    public Node next; // 指向下一个节点
86
+    public Node(Object name) {
87
+        this.item = name;
88
+    }
89
+
90
+    public String toString() {
91
+        return  "node name" + item;
92
+    }
93
+}
94
+
95
+```