A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

LinkedList接口(在代码的使用过程中和ArrayList没有什么区别)

7 个回复

倒序浏览
ArrayList底层是数组结构,LinkedList底层是数组结构,这两个结构之间的区别我想楼主已经知道,说其他的:
LinkedList不仅实现了List接口,还实现了Deque接口,Deque接口又是Queue(队列)接口的子接口,所以····可想而知:LinkedList能实现更强大的功能,只是我们暂时水平有限,用不到那么多,实际做开发的时候可能就不一样了,,,楼主可以查查API看看以上两个接口的方法,和LinkedList的特有方法,想想它的存在还是很有必要的。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
LinkedList类
  LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。
  注意LinkedList没有同步方法。如果多个线程同时访问一个List,则必须自己实现访问同步。一种解决方法是在创建List时构造一个同步的List:
    List list = Collections.synchronizedList(new LinkedList(...));

ArrayList类
  ArrayList实现了可变大小的数组。它允许所有元素,包括null。ArrayList没有同步。
size,isEmpty,get,set方法运行时间为常数。但是add方法开销为分摊的常数,添加n个元素需要O(n)的时间。其他的方法运行时间为线性。
  每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。
  和LinkedList一样,ArrayList也是非同步的(unsynchronized)。

评分

参与人数 2技术分 +1 黑马币 +1 收起 理由
王--明 + 1
admin + 1

查看全部评分

回复 使用道具 举报
个人觉得一楼的"LinkedList底层是数组结构"观点不是很正确。
1、通过观察LinkedList的源代码,我们可以看到:
private static class Entry {
  Object element;
  Entry next;
  Entry previous;
}
这说明了LinkedList内部封装的是一个个的entry对象,和前一个以及后一个entry对象的引用。
每个entry对象对应LinkedList中的一个元素。

2、至于ArrayList,底层肯定是数组实现的,这个就不多说。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
基本的ArrayList : 它长于随机访问元素,在list的中间插入和移除元素时比较慢
linkedList :通过代价较低List中间进行插入和删除操作,提供了优化的顺序访问。在随机访问方面相对比较慢。
回复 使用道具 举报
两者区别:
1.对ArrayList和LinkedList而言,在列表末尾增加一个元素固定的。对 ArrayList而言,主要是在内部数组中增加一项,指向所添加的元素,偶尔可能会导致对数组重新进行分配;而对LinkedList而言,这个是统一的,分配一个内部Entry对象。
2.在ArrayList的 中间插入或删除一个元素意味着这个列表中剩余的元素都会被移动;而在LinkedList的中间插入或删除一个元素的是固定的。
3.LinkedList不 支持高效的随机元素访问
回复 使用道具 举报
ArrayList 底层采用数组实现,当使用不带参数的构造方法生成 ArrayList 对象时,实际上会在底层生成一个长度为 10 的Object 类型数组,当向 ArrayList 添加一个对象时,实际上就是将该对象放置到了 ArrayList 底层所维护的数组当中。LinkedList 底层采用双向链表实现,当向 LinkedList 中添加一个对象时,实际上 LinkedList 内部会生成一个Entry 对象,该 Entry对象的结构为:
Entry
{
  Entry previous;
  Object element;
  Entry next;
}
其中的 Object 类型的元素 element 就是我们向 LinkedList 中所添加的元素,然后 Entry又构造好了向前与向后的引用 previous、next,最后将生成的这个 Entry对象加入到了链表当中。换句话说,LinkedList中所维护的是一个个的 Entry对象。
  当执行插入或者删除操作时,采用LinkedList比较好。
  当执行搜索操作时,采用ArrayList 比较好。
回复 使用道具 举报
ArrayList代表长度可变的数组。允许对元素进行快速的随机访问,但是向ArrayList中插入与删除元素的速度较慢。
LinkedList在现实中采用链表数据结构。对顺序访问进行了优化,向List中插入和删除元素的速度较快,但是访问速度则相对较慢。随机访问是指检索位于特定索引位置的元素。LinkedList可以作为堆栈、队列和双向队列来使用。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马