精华内容
下载资源
问答
  • ArrayList 和LinkedList各自的特点什么,自己实用中的总结
  • LinkedList特点

    千次阅读 2019-09-11 20:04:09
    聊一聊LinkedList特点吧~(以下都是基于jdk1.8) 继承树 LinkedList的继承树如下图: 特点 (1)允许null值 (2)内部以双向链表的形式来保存集合中的元素 /** * Pointer to first node. * Invariant: (first...

    聊一聊LinkedList的特点吧~(以下都是基于jdk1.8)

    继承树

    LinkedList的继承树如下图:
    在这里插入图片描述

    特点

    (1)允许null值

    (2)内部以双向链表的形式来保存集合中的元素

    	/**
         * Pointer to first node.
         * Invariant: (first == null && last == null) ||
         *            (first.prev == null && first.item != null)
         */
        transient Node<E> first;
    
        /**
         * Pointer to last node.
         * Invariant: (first == null && last == null) ||
         *            (last.next == null && last.item != null)
         */
        transient Node<E> last;
    

    这个节点是一个双向节点:

    private static class Node<E> {
            E item;
            Node<E> next;
            Node<E> prev;
    
            Node(Node<E> prev, E element, Node<E> next) {
                this.item = element;
                this.next = next;
                this.prev = prev;
            }
        }
    

    (3)实现了Deque接口,意味着可以当做双端队列、栈来使用

    (4)线程不安全,线程安全的可以使用:List list = Collections.synchronizedList(new LinkedList(…));

    (5)fail-fast机制

    (6)所有指定位置的操作都是从头开始遍历进行的

    (7)元素是有序的,输出顺序与输入顺序一致

    展开全文
  • LinkedList底层是链表,方便增删,但是查找不方便。 从名字可以推想出底层 从底层可以推想出其特点 Q1: 说一说 ArrayList ArrayList 是容量可变的非线程安全列表,使用数组实现,集合扩容时会创建更大的数组,把...

    ArrayList底层是数组,方便查找,不方便增加删除元素。LinkedList底层是链表,方便增删,但是查找不方便。

    从名字可以推想出底层
    从底层可以推想出其特点

    Q1: 说一说 ArrayList

    ArrayList 是容量可变的非线程安全列表,使用数组实现,集合扩容时会创建更大的数组,把原有数组复制到新数组。支持对元素的快速随机访问,但插入与删除速度很慢。ArrayList 实现了 RandomAcess 标记接口,如果一个类实现了该接口,那么表示使用索引遍历比迭代器更快。

    elementData是 ArrayList 的数据域,被 transient 修饰,序列化时会调用 writeObject 写入流,反序列化时调用 readObject 重新赋值到新对象的 elementData。原因是 elementData 容量通常大于实际存储元素的数量,所以只需发送真正有实际值的数组元素。

    size 是当前实际大小,elementData 大小大于等于 size。

    **modCount **记录了 ArrayList 结构性变化的次数,继承自 AbstractList。所有涉及结构变化的方法都会增加该值。expectedModCount 是迭代器初始化时记录的 modCount 值,每次访问新元素时都会检查 modCount 和 expectedModCount 是否相等,不相等就会抛出异常。这种机制叫做 fail-fast,所有集合类都有这种机制。


    Q2:说一说 LinkedList

    LinkedList 本质是双向链表,与 ArrayList 相比插入和删除速度更快,但随机访问元素很慢。除继承 AbstractList 外还实现了 Deque 接口,这个接口具有队列和栈的性质。成员变量被 transient 修饰,原理和 ArrayList 类似。

    LinkedList 包含三个重要的成员:size、first 和 last。size 是双向链表中节点的个数,first 和 last 分别指向首尾节点的引用。

    LinkedList 的优点在于可以将零散的内存单元通过附加引用的方式关联起来,形成按链路顺序查找的线性结构,内存利用率较高。

    展开全文
  • 这样就带来以下缺点: 快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素。 向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这个数组时
    ArrayList 
    ArrayList其实是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象是,数组的大小也相应的改变。这样就带来以下有缺点:
    快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素。
    向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这个数组时就必须在内存中做很多事情。
    操作其中对象的速度慢 当你要想数组中任意两个元素中间添加对象时,数组需要移动所有后面的对象。
    
    LinkedList
    LinkedList是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点的引用即可,当删除记录时也一样。这样就带来以下有缺点:
    操作其中对象的速度快 只需要改变连接,新的节点可以在内存中的任何地方
    不能随即访问 虽然存在get()方法,但是这个方法是通过遍历接点来定位的所以速度慢。
    
    说白了,就是数据结构中的顺序存储和链式存储
    展开全文
  • 菜鸡每日一面系列打卡7天每天一道面试题目助力小伙伴轻松拿offer坚持就是胜利,我们一起努力!题目描述ArrayList与LinkedList有什么区别?题目分析这是一道Java集合相...

    菜鸡每日一面系列打卡7

    每天一道面试题目 

    助力小伙伴轻松拿offer

    坚持就是胜利,我们一起努力!

    题目描述

    ArrayListLinkedList有什么区别?

    题目分析

    这是一道Java集合相关的题目,在面试过程中,面试官尤其喜欢考查集合的相关内容。一方面是因为集合很重要,Java程序员几乎每天都会或多或少地使用集合;另一方面是因为,通过对集合底层原理的考查,能够看出求职者的技术心。对于日常使用的工具,你是否会深入底层一探究竟,还是说只是能用用这个工具。拥有不同态度的选手,技术水平天差地别是很正常的事。要想用对用好一个工具,不仅要懂这个工具的运行规则,还要深入其实现原理,乃至诞生的初衷。“深入理解”,说的就是这么回事。

    题目解答

    ArrayListLinkedList的区别主要可以从底层结构,特点,以及使用场景来看。

    • 从底层结构来看,ArrayList底层是Object数组,而LinkedList底层是双向链表。

        

    • 底层结构决定其特点,ArrayList底层是由数组实现的,这意味着对其进行查询操作效率较高,而插入删除操作效率较低;而LinkedList底层是由双向链表实现的,这意味着对其进行插入删除操作效率较高,而查询操作效率较低。这其实是一种笼统的说法,效率高低都是相对而言的,而且插入删除操作的效率还会受具体的操作位置影响,因此并不是绝对的。

    • 特点决定其使用场景,ArrayList适用于查询较多的场合,因为数组的特点支持快速随机访问;而LinkedList适用于插入删除较多的场合,例如队列的出队,入队等。

    以上便是ArrayListLinkedList的主要区别,更进一步可以从其具体的操作方法入手进行比较,可以视面试的具体情况而定。

    以上是菜鸡在面对这道面试题的时候的一些思路,供大家参考。

    学习 | 工作 | 分享

    ????长按关注“有理想的菜鸡

    只有你想不到,没有你学不到

    展开全文
  • 这样就带来以下缺点: 快速随即访问 你可以随即访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为i的数组元素。 向其中添加对象速度慢 当你创建数组是并不能确定其容量,所以当改变这个数组时就...
  • java中的ArrayList集合的特点及其常用方法 1.ArrayList集合特点 ...主要用于查询数据、遍历数据2.LinkedList集合的特点: 底层是一个双向链表结构:增删快,查询慢 包含大量操作首尾元素的方法 3.LinkedL...
  • LinkedList

    2021-02-05 13:58:16
    LinkedList实现了List接口,有序、元素重复 LinkedList语法 class Node<E>{ E item; Node<E> next; Node<E> prev; } LinkedList的方法 方法 说明 void addFirst(E e) 将指定元
  • 1. 什么时候选择LinkedList? 当需要频繁的插入和删除元素时可以使用LinkedList 数据结构:双向链式存储 特点:插入或删除元素的效率高 2.LinkedList常用方法? 首先具有List的所有方法,同时具有一些LinkedList独有...
  • Java LinkedList特点: LinkedList底层用双向链表实现的存储。特点:查询效率低,增删效率高,线程不安全。 存储结构图: 查看源码: public class LinkedList<E> extends AbstractSequentialList<E> ...
  • LinkedList特点和常用操作

    千次阅读 2019-12-27 10:55:17
    LinkedList特点和常用操作一、在线API二、特点三、基本操作1.创建LinkedList2.访问LinkedList3.Iterator遍历4.forEach 遍历 一、在线API 在线API 二、特点 LinkedList实现了Queue、Deque接口,; ArrayList适合删除...
  • title: JavaLinkedList特点和底层实现 date: 2020-03-25 22:25:50 author: JF ...tags: - Java ...LinkedList特点和底层实现 LinkedList底层用双向链表实现的存储。 特点:查询效率低,增删效率高,...
  • ArrayList和LinkedList集合有什么区别?

    万次阅读 多人点赞 2018-02-01 19:52:24
    的人可能会说ArrayList底层是一个数组,所以查询快,LinkedList底层是一个链表,所以增删快. 这样回答的话当然比第一个更好,但是还是不够! 那么到底怎么回答才全面呢?直接上图! 数组 链表 那么为什么
  • linkedlist

    2021-03-03 19:36:10
    linkedlist内部主要三个属性,Node first、Node last、int size。且每个Node内部包含了Node prev、Node next add操作 新建一个Node节点,该Node的prev指向last,next=null。如果last==null,则该Node设置为first...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,205
精华内容 18,482
关键字:

linkedlist有什么特点