您的位置:首页 > 娱乐 > 明星 > LinkedList

LinkedList

2024/10/7 0:24:52 来源:https://blog.csdn.net/qq_64633597/article/details/140456850  浏览:    关键词:LinkedList

底层操作机制        

源码图解0515

  1. 底层维护了一个双向链表,实现了双端队列特点
  2. 维护了两个属性,first,last   分别指向 首节点和尾节点
  3. 每个节点 (Node对象),又维护了prev,next,item
  4. LinkedList元素的添加和删除,不是通过数组完成的,效率相对较高
  5. 线程不安全,没有实现同步
  6. 模拟LinkedList
    package chapter;public class LinkedList {public static void main(String[] args) {Node a = new Node("jack");Node b = new Node("Tom");Node c = new Node("Jerry");//连接结点a.next = b;b.next = c;c.prev = b;b.prev = a;Node first = a; //双向链表的头结点Node last = c; //双向链表的尾结点//遍历   前到后System.out.println("=================================");while(true){if(first == null){break;}System.out.println(first);first = first.next;}//遍历   后到前System.out.println("=================================");while(true){if(last == null){break;}System.out.println(last);last = last.prev;}//添加对象Node d = new Node("smith");d.next =c;d.prev = a;a.next =d;c.prev = d;//再次遍历System.out.println("=================================");first = a;while(true){if(first == null){break;}System.out.println(first);first = first.next;}}
    }//定义一个Node类,即定义一个Node节点
    class Node {public Object item;   //存放数据的位置public Node next;     //后一个结点public Node prev;     //上一个结点public Node(Object item) {this.item = item;}@Overridepublic String toString() {return "Node{" +"item=" + item;}
    }

    toString重写next  prev 产生问题

方法

add()

remove()

比较

底层结构增删的效率改查的效率
ArrayList可变数组

较低

数组扩容

较高
LinkedList双向链表

较高

通过链表追加

较低
  1. 改查操作多,ArrayList
  2. 增删操作多,LinkedList
  3. 一般程序中,大多为查询,故采用ArrayList
  4. 也可两个模块分别使用ArrayList  LinkedList

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com