(1)人が諦めない限り、全世界があなたを諦めない
(2)私は大いに役立つために生まれる(3)
学ぶことの苦しみに耐えられないのなら、人生の苦しみに耐えなければならない。深い理解。
(4)難しいことをすることで得なければなりません。(
5)精神は本当の刃です。
(6)相手を2回、心の中で初めて征服します。
(7)書くのは本当に簡単ではありません。好きな場合や何か持っている場合好き+フォローまたはお気に入りを忘れないでください〜
Java SE 041LinkedListソースコードの詳細な分析
記事ディレクトリ
1.ArrayList
追加された要素の数が10を超えると、ArrayListの下部に新しい配列が生成されます。その長さは元の配列の1.5倍+ 1です。その後、元の配列の内容が新しい配列にコピーされ、後続の追加された内容が新しい配列内。新しい配列が追加された要素に対応できない場合、プロセスが繰り返されます。
2.ArrayList挿入
ArrayListの削除操作では、削除された要素の後続の要素を前方に移動する必要があり、これは比較的コストがかかります。
3.コレクションノート
(1)オブジェクトへの参照のみをコレクションに配置でき、ネイティブデータタイプは配置できません。コレクションに追加するには、ネイティブデータタイプのパッケージングクラスを使用する必要があります。
(2)コレクションに配置されるオブジェクトはすべてObject型であるため、取り出されるオブジェクトの型もObject型であるため、キャストを使用して実際の型(配置される型)に変換する必要があります。
4.LinkedList
4.1単一リンクリスト
package com.javase.linkedlist;
public class Node {
String data;//用于存储数据
Node next; //存放指向下一个节点的引用
public Node(String data) {
this.data = data;
}
}
package com.javase.linkedlist;
public class LinkedListTest {
public static void main(String[] args) {
Node node1 = new Node("node1");
Node node2 = new Node("node2");
Node node3 = new Node("node3");
node1.next = node2;
node2.next = node3;
System.out.println(node1.next.next.data);
}
}
package com.javase.linkedlist;
public class LinkedListTest {
public static void main(String[] args) {
Node node1 = new Node("node1");
Node node2 = new Node("node2");
Node node3 = new Node("node3");
node1.next = node2;
node2.next = node3;
System.out.println(node1.next.next.data);
//增加node4
Node node4 = new Node("node4");
node1.next = node4;
node4.next = node2;
System.out.println(node1.next.data);
//删除node4
node1.next = node2;
node2.next = null;
System.out.println(node1.next.data);
}
}
4.2二重リンクリスト
(1)時計回り方向:
第1要素の後継者から第2要素の前任者へ、第2要素の後継者から第3要素の前任者へ、第3要素の後継者から第1要素の前任者へ。
(2)反時計回り方向:
最後の要素の先行から2番目の要素の後続へ、2番目の要素の先行から最初の要素の後続へ、および最初の要素の先行から最後の要素の後続へ。
package com.javase.linkedlist;
public class Node2 {
Node2 previous;
String data;
Node2 next;
public Node2(String data){
this.data = data;
}
}
package com.javase.linkedlist;
public class LinkedListTest2 {
public static void main(String[] args) {
Node2 node1 = new Node2("node1");
Node2 node2 = new Node2("node2");
Node2 node3 = new Node2("node3");
//顺时针
node1.next = node2;
node2.next = node3;
node3.next = node1;
//逆时针
node3.previous = node2;
node2.previous = node1;
node1.previous = node3;
}
}
4.2.1要素を挿入する
(1)時計回り:
最初の要素の後続を挿入された要素の先行にポイントし、挿入された要素の後続を2番目の要素の先行にポイントします。
(2)逆時間:2番目の要素の先行を挿入された要素の後続に
ポイントします。挿入された要素の先行要素を最初の要素の後続要素にポイントします。
package com.javase.linkedlist;
public class LinkedListTest2 {
public static void main(String[] args) {
Node2 node1 = new Node2("node1");
Node2 node2 = new Node2("node2");
Node2 node3 = new Node2("node3");
//顺时针
node1.next = node2;
node2.next = node3;
node3.next = node1;
//逆时针
node3.previous = node2;
node2.previous = node1;
node1.previous = node3;
//插入一个元素
Node2 node4 = new Node2("node4");
node1.next = node4;
node4.next = node3;
node3.previous = node4;
node4.previous = node1;
}
}
4.2.2要素を削除する
package com.javase.linkedlist;
public class LinkedListTest2 {
public static void main(String[] args) {
Node2 node1 = new Node2("node1");
Node2 node2 = new Node2("node2");
Node2 node3 = new Node2("node3");
//顺时针
node1.next = node2;
node2.next = node3;
node3.next = node1;
//逆时针
node3.previous = node2;
node2.previous = node1;
node1.previous = node3;
//插入一个元素
Node2 node4 = new Node2("node4");
node1.next = node4;
node4.next = node3;
node3.previous = node4;
node4.previous = node1;
//删除一个元素
node1.next = node2;
node2.previous = node1;
node4.next = null;
node4.previous = null;
}
}
5.ArrayListとLinkedListの違い
(1)ArrayListの最下層は配列によって実現され、LinkedListの最下層は二重リンクリストによって実現されます。
(2)操作を挿入または削除するときは、LinkedListを使用することをお勧めします。
(3)検索操作を行うときは、ArrayListを使用することをお勧めします。LinkedListが50番目の要素を見つけたい場合は、最初の要素から開始し、常に後続の要素を見つける必要があるためです。ArrayListは、特定の場所からのみフェッチする必要があります。
ArrayListとLinkedListの違い
(1)ArrayListの最下層は配列によって実現され、LinkedListの最下層は二重リンクリストによって実現されます。
(2)操作を挿入または削除するときは、LinkedListを使用することをお勧めします。
(3)検索操作を行うときは、ArrayListを使用することをお勧めします。LinkedListが50番目の要素を見つけたい場合は、最初の要素から開始し、常に後続の要素を見つける必要があるためです。ArrayListは、特定の場所からのみフェッチする必要があります。