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 NodeObject data){ this.data = data; } } public DoublePointLinkedList){ size = 0; head = null; tail = null; } //链表头新增节点 public void addHeadObject data){ Node node = new Nodedata); ifsize == 0){//如果链表为空,那么头节点和尾节点都是该新增节点 head = node; tail = node; size++; }else{ node.next = head; head = node; size++; } } //链表尾新增节点 public void addTailObject data){ Node node = new Nodedata); ifsize == 0){//如果链表为空,那么头节点和尾节点都是该新增节点 head = node; tail = node; size++; }else{ tail.next = node; tail = node; size++; } } //删除头部节点,成功返回true,失败返回false public boolean deleteHead){ ifsize == 0){//当前链表节点数为0 return false; } ifhead.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){ ifsize >0){ Node node = head; int tempSize = size; iftempSize == 1){//当前链表只有一个节点 System.out.println"["+node.data+"]"); return; } whiletempSize>0){ ifnode.equalshead)){ System.out.print"["+node.data+"->"); }else ifnode.next == null){ System.out.printnode.data+"]"); }else{ System.out.printnode.data+"->"); } node = node.next; tempSize--; } System.out.println); }else{//如果链表一个节点都没有,直接打印[] System.out.println"[]"); } } }
登录后复制
以上就是java中什么是链表的详细内容,更多请关注风君子博客其它相关文章!