LinkedList는 순환 이중 연결 목록 데이터 구조를 사용합니다. 배열 기반 ArrayList와 비교할 때 이는 완전히 다른 두 가지 구현 기술이며 완전히 다른 작업 시나리오에 적합하다고 결정됩니다.
연결된 목록은 선형 목록이지만, 대신 각 노드에 다음 노드에 대한 포인터를 저장합니다.
연결된 목록 구조를 사용하면 데이터 크기를 미리 알아야 하는 배열 연결 목록의 단점을 극복할 수 있습니다. 연결 목록 구조는 컴퓨터 메모리 공간을 최대한 활용하고 유연한 동적 메모리 관리를 달성할 수 있습니다. 그러나 연결리스트는 배열을 무작위로 읽는 장점을 상실하며, 동시에 노드의 포인터 필드의 증가로 인해 연결리스트의 공간 오버헤드가 상대적으로 크다.
예:
package com.ys.link; public class DoublePointLinkedList { private Node head;//头节点 private Node tail;//尾节点 private int size;//节点的个数 private class Node{ private Object data; private Node next; public Node(Object data){ this.data = data; } } public DoublePointLinkedList(){ size = 0; head = null; tail = null; } //链表头新增节点 public void addHead(Object data){ Node node = new Node(data); if(size == 0){//如果链表为空,那么头节点和尾节点都是该新增节点 head = node; tail = node; size++; }else{ node.next = head; head = node; size++; } } //链表尾新增节点 public void addTail(Object data){ Node node = new Node(data); if(size == 0){//如果链表为空,那么头节点和尾节点都是该新增节点 head = node; tail = node; size++; }else{ tail.next = node; tail = node; size++; } } //删除头部节点,成功返回true,失败返回false public boolean deleteHead(){ if(size == 0){//当前链表节点数为0 return false; } if(head.next == null){//当前链表节点数为1 head = null; tail = null; }else{ head = head.next; } size--; return true; } //判断是否为空 public boolean isEmpty(){ return (size ==0); } //获得链表的节点个数 public int getSize(){ return size; } //显示节点信息 public void display(){ if(size >0){ Node node = head; int tempSize = size; if(tempSize == 1){//当前链表只有一个节点 System.out.println("["+node.data+"]"); return; } while(tempSize>0){ if(node.equals(head)){ System.out.print("["+node.data+"->"); }else if(node.next == null){ System.out.print(node.data+"]"); }else{ System.out.print(node.data+"->"); } node = node.next; tempSize--; } System.out.println(); }else{//如果链表一个节点都没有,直接打印[] System.out.println("[]"); } } }
위 내용은 자바의 연결리스트란 무엇인가의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!