LinkedList使用了迴圈雙向鍊錶資料結構。與基於數組ArrayList相比,這是兩種截然不同的實作技術,這也決定了它們將適用於完全不同的工作場景。
鍊錶(Linked list)是一種常見的基礎資料結構,是一種線性表,但是並不會以線性的順序儲存數據,而是在每一個節點裡存到下一個節點的指標(Pointer)。
使用鍊錶結構可以克服陣列鍊錶需要預先知道資料大小的缺點,鍊錶結構可以充分利用電腦記憶體空間,實現靈活的記憶體動態管理。但是鍊錶失去了數組隨機讀取的優點,同時鍊錶由於增加了結點的指標域,空間開銷比較大。
實例:
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("[]"); } } }
以上是java中什麼是鍊錶的詳細內容。更多資訊請關注PHP中文網其他相關文章!