神代綺凛の随波逐流 - [Java] ArrayList 与 LinkedList 的评论 ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构。在一次实验中偶然发现并实验了这两者的不同之处,很有意思 2018-12-06T18:32:48+08:00 Typecho https://moe.best/feed/atom/java/java-array-and-linked.html <![CDATA[熄灯乐园]]> https://moe.best/java/java-array-and-linked.html/comment-page-1#comment-4571 2018-12-06T18:32:48+08:00 2018-12-06T18:32:48+08:00 熄灯乐园 java中的链表是双向链表,jdk1.8中的源码可以看到节点中有指向下一个节点的next和指向前一个节点的prev。

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;
        }
    }

并且只有在jdk1.6及以前的版本中才是循环链表,之后的版本中改为了非循环链表,虽然只是换了种实现方法,功能还是一致的。(jdk1.6中只有Node header;之后的为Node first;Node last;两个)。

]]>
<![CDATA[Zero]]> https://moe.best/java/java-array-and-linked.html/comment-page-1#comment-4486 2018-11-27T15:05:45+08:00 2018-11-27T15:05:45+08:00 Zero https://mikuac.com 转了转了,我会加出处的(确信 ::aru:cryingface::

]]>
<![CDATA[Zero]]> https://moe.best/java/java-array-and-linked.html/comment-page-1#comment-4485 2018-11-27T15:04:58+08:00 2018-11-27T15:04:58+08:00 Zero https://mikuac.com 受教+1 ::aru:cryingface::

]]>
<![CDATA[神代綺凜]]> https://moe.best/java/java-array-and-linked.html/comment-page-1#comment-3431 2018-07-11T22:11:07+08:00 2018-07-11T22:11:07+08:00 神代綺凜 https://lolico.moe ::aru:dead:: 原来如此,受教了

]]>
<![CDATA[大米]]> https://moe.best/java/java-array-and-linked.html/comment-page-1#comment-3429 2018-07-11T18:11:06+08:00 2018-07-11T18:11:06+08:00 大米 首先,准确的测试应该事先生成所有的学生对象,保存在一个非常大的数组里备用,然后操作链表,且只在操作链表的时候计时。
第二,Java的链表是单向循环链表,链表指针指向表尾,因为是循环链表,寻址到表头也非常快。
第三,List的操作不仅是添加和插入,还有删除!你没有测试删除。如果你测试删除,注意不是根据索引来删除,而是根据对象来删除,就能看出线性表和链表的区别了。
第四,Java的ArrayList会动态扩展数组容量,每次多一倍的容量(10,20,40,80。。。),你在表的末尾添加元素,在绝大部分情况下,那里都正好有一个空位,不需要移动任何元素,也不需要扩展容量,所以速度非常快。在表头插入元素,就需要移动元素,所以慢。
第五,在中间的某个索引位置插入元素的话,ArrayList是立即寻址,复杂度O(1),LinkedList要顺着指针链遍历,复杂度O(n),这是LinkedList较慢的主要原因。
总结,如果链表较大,且经常插入删除,还是要使用LinkedList。因为添加/插入通常都是在表头或者表尾发生,极少在表的中间,而在删除的时候,我们通常是要删除一个对象,且极少能事先知道对象在List里的索引,在不知道索引的情况删除元素,ArrayList就很慢了。

]]>
<![CDATA[神代綺凜]]> https://moe.best/java/java-array-and-linked.html/comment-page-1#comment-2505 2018-04-05T15:18:50+08:00 2018-04-05T15:18:50+08:00 神代綺凜 https://lolico.moe ::aru:nose:: 没有的,这种又不是固定的东西,不同的博客程序,不同的主题,改起来方法都不一样

]]>
<![CDATA[鸡腿堡]]> https://moe.best/java/java-array-and-linked.html/comment-page-1#comment-2503 2018-04-05T15:17:15+08:00 2018-04-05T15:17:15+08:00 鸡腿堡 好复杂 小白不会 ::aru:crying:: 我百度看看有没有类似的教程

]]>
<![CDATA[神代綺凜]]> https://moe.best/java/java-array-and-linked.html/comment-page-1#comment-2502 2018-04-05T15:15:41+08:00 2018-04-05T15:15:41+08:00 神代綺凜 https://lolico.moe 不是直接能用的,我这里有是因为主题作者设计了这个
如果从0开始弄的话,你还需要判断邮箱是不是qq邮箱,然后提取qq号,然后使用qlogo头像地址

]]>
<![CDATA[鸡腿堡]]> https://moe.best/java/java-array-and-linked.html/comment-page-1#comment-2500 2018-04-05T15:07:08+08:00 2018-04-05T15:07:08+08:00 鸡腿堡

是不是直接把这款代码写在commer.php那里呢⌇●﹏●⌇大佬

]]>
<![CDATA[神代綺凜]]> https://moe.best/java/java-array-and-linked.html/comment-page-1#comment-2499 2018-04-05T14:42:40+08:00 2018-04-05T14:42:40+08:00 神代綺凜 https://lolico.moe 你审查元素看一下评论头像的地址就懂了

]]>