Análisis en profundidad del código fuente de Java SE 041 LinkedList

(1) Mientras una persona no se rinda a sí misma, el mundo entero no se dará por vencido contigo.
(2) Nací para ser de gran utilidad . (3) Si no
puedo soportar el sufrimiento del aprendizaje, debo soportar el sufrimiento de la vida. Qué doloroso es Comprensión profunda.
(4) Debes ganar al hacer cosas difíciles . (
5) El espíritu es la verdadera espada.
(6) Conquistar oponentes dos veces, la primera vez en el corazón.
(7) Escribir no es realmente fácil. Si te gusta o tienes algo para ti Ayuda a recordar que te gusta + seguir o marcar como favorito ~

Análisis en profundidad del código fuente de Java SE 041 LinkedList

1.ArrayList

Si el número de elementos agregados supera los 10, se generará una nueva matriz en la parte inferior de ArrayList, cuya longitud es 1,5 veces + 1 de la matriz original. Luego, el contenido de la matriz original se copiará en la nueva matriz y los contenidos agregados posteriores se colocarán en En la nueva matriz. Cuando la nueva matriz no puede acomodar el elemento agregado, el proceso se repite.

2. Inserto ArrayList

Para la operación de eliminación de ArrayList, los elementos subsiguientes del elemento eliminado deben avanzar, lo cual es relativamente costoso.

3. Notas de la colección

(1) Solo se pueden colocar referencias a objetos en la colección y no se pueden colocar tipos de datos nativos. Necesitamos usar clases de empaquetado de tipos de datos nativos para agregarlos a la colección.

(2) Todos los objetos colocados en la colección son de tipo Objeto, por lo que el tipo que se saca también es de tipo Objeto, por lo que debe convertirse al tipo real (el tipo colocado) mediante una conversión de tipo coercitiva.

4.LinkedList

4.1 lista enlazada individualmente

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 Lista doblemente vinculada

Inserte la descripción de la imagen aquí

(1) Sentido horario:
del sucesor del primer elemento al predecesor del segundo elemento, del sucesor del segundo elemento al predecesor del tercer elemento y del sucesor del tercer elemento al predecesor del primer elemento. .
(2) Sentido antihorario:
del predecesor del último elemento al sucesor del segundo elemento, del predecesor del segundo elemento al sucesor del primer elemento, y del predecesor del primer elemento al sucesor del último elemento.

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 Insertar un elemento

Inserte la descripción de la imagen aquí

(1) En el sentido de las agujas del reloj:
apunte el sucesor del primer elemento al predecesor del elemento insertado y señale el sucesor del elemento insertado al predecesor del segundo elemento
(2) Tiempo inverso:
apunte el predecesor del segundo elemento al sucesor del elemento insertado, Apunte el predecesor del elemento insertado al sucesor del primer elemento.

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 Eliminar un elemento

Inserte la descripción de la imagen aquí

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. La diferencia entre ArrayList y LinkedList

(1) La capa inferior de ArrayList se realiza mediante una matriz, y la capa inferior de LinkedList se realiza mediante una lista doblemente enlazada.
(2) Al insertar o eliminar operaciones, es mejor usar LinkedList.
(3) Al realizar operaciones de búsqueda, es mejor utilizar ArrayList. Porque si LinkedList quiere encontrar el elemento 50, debe partir del primero y encontrar constantemente sus sucesores. El ArrayList solo debe obtenerse de la ubicación específica.

La diferencia entre ArrayList y LinkedList
(1) La capa inferior de ArrayList se realiza mediante una matriz, y la capa inferior de LinkedList se realiza mediante una lista doblemente vinculada.
(2) Al insertar o eliminar operaciones, es mejor usar LinkedList.
(3) Al realizar operaciones de búsqueda, es mejor utilizar ArrayList. Porque si LinkedList quiere encontrar el elemento 50, debe partir del primero y encontrar constantemente sus sucesores. El ArrayList solo debe obtenerse de la ubicación específica.

Supongo que te gusta

Origin blog.csdn.net/xiogjie_67/article/details/108540759
Recomendado
Clasificación