用Java这么多年,以为了解LinkedList,ArrayList的差异,没想到今天发现有些事情是幻觉。
一直觉得LinkedList.add()比ArrayList.add()要快,因为ArrayList在内部数组大小不足时会扩大数组(初始值10,每次增大50%+1),但是今天在代码review时一位同事提出了质疑(thx,gavin)。
当时争论很激烈,没有定论。回到家我做了个性能测试,发现在只对队尾添加元素的话,n(循环add(Object))不大的情况下,LinkedList的性能不比ArrayList强,甚至在n=30万时要慢得4倍多。
应该是由于LinkedList内部新建Entry保存双向关联造成的性能损耗。
所以在大多数情况下,ArrayList是最佳选择,只有需要大规模中间插值的场合下,LinkedList才需要被考虑。
流行的单纯算法分析,O(1)、O(n)、O(n/2)都敌不过实际性能测试。
另外,同事sam的随机子列表算法被证明是具有随机性的(依我的观察,固定参数下还是有点不均匀),但是性能却比不上更简单的随机碰撞检测法,在采样数n的情况下,性能最慢估计会有n平方/2倍。
为了杀灭碰撞法亿万分之一的死循环概率,这么干实在是有点闲得慌啊。:)
分享到:
相关推荐
本文将详细讲解如何使用Java中的LinkedList类来模拟这两种数据结构,并实现其基本操作。 堆栈(Stack)是一种后进先出(LIFO, Last In First Out)的数据结构,它遵循“先进后出”的原则。常见的堆栈操作有压栈...
### List-LinkedList 单链表就地反转 #### 概述 本文主要介绍单链表的就地反转算法实现,并通过具体的C语言代码示例来解释这一过程。单链表是一种常见的线性数据结构,其中每个元素包含一个指向下一个元素的指针。...
在Java编程语言中,LinkedList是一个常用的集合类,它实现了List接口,同时也提供了双向链表的实现。LinkedList不仅可以作为列表使用,还可以被巧妙地利用来构建栈(Stack)和队列(Queue)这两种基本数据结构。在本...
LinkedList 是 Java 中的一种数据结构,属于线性数据结构的一种,但它与数组有着本质的不同。数组在内存中存储元素是连续的,而 LinkedList 则通过节点之间的引用相互连接,每个节点包含元素本身、指向前一个节点的...
ArrayList LinkedList Vector 区别 ArrayList、LinkedList、Vector 是 Java 中常用的数据结构实现类,它们都实现了 List 接口,但它们在存储方式、性能、线程安全性等方面有着不同特点。 首先,ArrayList 和 ...
在Java编程中,LinkedList是一个非常重要的数据结构,它实现了List接口,允许我们在列表的任何位置进行插入和删除操作。LinkedList内部使用双向链表实现,因此它的遍历速度比ArrayList快,但随机访问性能较差。本...
LinkedList是Java编程语言中的一种重要数据结构,它属于集合框架的一部分,主要用来存储有序的元素序列。LinkedList在实现上是一个双链表,每个节点(Node)包含数据元素和两个引用,一个指向前一个节点,另一个指向...
LinkedLIst.cpp
LinkedList是计算机科学中的一种基本数据结构,特别是在C++编程中,它被广泛用于处理动态集合。LinkedList的主要特点是每个元素(称为节点)包含数据以及指向下一个节点的指针,这种结构使得在列表中间添加或删除...
非常简单的Java LinkedList 应用实例
在Java编程语言中,ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们都在java.util包中,用于存储和管理对象的集合。这三个类都实现了List接口,提供了多种操作方法,但它们在内部实现和性能特性上有所...
在IT领域,特别是Java编程中,ArrayList和LinkedList是两种非常重要的数据结构,它们都是List接口的实现类。理解这两者的区别对于优化程序性能至关重要。面试官询问这些知识点,旨在评估应聘者的理论基础和实践能力...
在Java编程语言中,LinkedList是一个实现List接口的类,它以双向链表的形式存储元素。这个数据结构允许我们在列表的任何位置进行插入和删除操作,具有O(1)的时间复杂度,这使得LinkedList在需要频繁进行这些操作时比...
在Java编程语言中,LinkedList是一种线性数据结构,属于集合框架的一部分,实现了List接口和Deque接口。LinkedList以链表的形式存储元素,这使得它在添加和删除元素时具有较高的效率,尤其是在列表的中间或开头进行...
【ArrayList、LinkedList、Vector对比分析】 1. **List概述** List接口是Java集合框架中的重要组成部分,它是一个有序的集合,允许重复元素,并且保持插入顺序。List接口的实现类主要有ArrayList、LinkedList和...
### LinkedList部分源码解析 #### 一、简介 `LinkedList`是Java集合框架的一个重要组成部分,它基于双向链表实现,既支持`List`接口也实现了`Deque`接口,因此可以作为列表、栈或者队列使用。双向链表的每个节点...
LinkedList是一种链表结构,它提供了双向链接的能力,允许我们在列表的任何位置进行插入和删除操作。本话题将深入探讨如何使用LinkedList来实现一个栈,并考虑在多线程环境下的同步问题。 首先,LinkedList类位于...
ArrayList、LinkedList和Vector是三种常见的动态数组实现,它们各自有特定的特性和使用场景。这里我们将深入探讨这三个类的性能对比,以及它们在不同操作下的表现。 ArrayList是基于动态数组实现的,它提供了随机...
### LinkedList的用法详解 #### 一、简介 在Java集合框架中,`LinkedList`类是一种基于链表实现的线性数据结构,继承自`AbstractSequentialList`抽象类,并实现了`List`接口与`Deque`接口。由于其内部是通过双向...