问个基本的问题【菜鸟】

blueskyfly119 2009-09-02 12:18:10
请教各位高手

list list1 = new ArrayList(10);

list list2 = new LinkedList(10);

想问一下,list1与list2有什么不一样的

在类ArrayList何LinkedList中 实现的  接口list中的抽象方法  是一样的吗?

例如,ArrayList中的实现的方法 add,equals,与LinkedList中实现的一样吗,

如果不一样的话,那list1与list2就是根据new的不同实例而不同了?但是他们都是声名的list类型

这样就是多态吗?

谢谢
...全文
92 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
huachao1 2009-09-02
  • 打赏
  • 举报
回复
简单的说,ArrayList可以像数组一样使用,LinkedList可以像链表一样使用,不同的使用场合效率不同
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 viszl 的回复:]
引用 4 楼 bao110908 的回复:
是的,这种称为多态,在面向对象设计上也符合里氏替换原则。

不仅仅是多态吧,LinkedList实现了Queue接口啊,而ArrayList没有
[/Quote]

这应该是 List 的多态
cz61919345 2009-09-02
  • 打赏
  • 举报
回复
楼上的api的版本是怎样的呀?
怎么还有中文说明了呀?
zhoujingxian 2009-09-02
  • 打赏
  • 举报
回复

public class ArrayList<E>extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, SerializableList 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。(此类大致上等同于 Vector 类,除了此类是不同步的。)

size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。add 操作以分摊的固定时间 运行,也就是说,添加 n 个元素需要 O(n) 时间。其他所有操作都以线性时间运行(大体上讲)。与用于 LinkedList 实现的常数因子相比,此实现的常数因子较低。

每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。

在添加大量元素前,应用程序可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。

注意,此实现不是同步的。如果多个线程同时访问一个 ArrayList 实例,而其中至少一个线程从结构上修改了列表,那么它必须 保持外部同步。(结构上的修改是指任何添加或删除一个或多个元素的操作,或者显式调整底层数组的大小;仅仅设置元素的值不是结构上的修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法将该列表“包装”起来。这最好在创建时完成,以防止意外对列表进行不同步的访问:

List list = Collections.synchronizedList(new ArrayList(...));
此类的 iterator 和 listIterator 方法返回的迭代器是快速失败的:在创建迭代器之后,除非通过迭代器自身的 remove 或 add 方法从结构上对列表进行修改,否则在任何时间以任何方式对列表进行修改,迭代器都会抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不是冒着在将来某个不确定时间发生任意不确定行为的风险。

注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器的快速失败行为应该仅用于检测 bug。
==================================
public class LinkedList<E>extends AbstractSequentialList<E>implements List<E>, Queue<E>, Cloneable, SerializableList 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列 (deque)。

此类实现 Queue 接口,为 add、poll 等提供先进先出队列操作。其他堆栈和双端队列操作可以根据标准列表操作方便地进行再次强制转换。虽然它们可能比等效列表操作运行稍快,但是将其包括在这里主要是出于方便考虑。

所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。

注意,此实现不是同步的。如果多个线程同时访问列表,而其中至少一个线程从结构上修改了该列表,则它必须 保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成。如果不存在这样的对象,则应该使用 Collections.synchronizedList 方法来“包装”该列表。最好在创建时完成这一操作,以防止对列表进行意外的不同步访问,如下所示:

List list = Collections.synchronizedList(new LinkedList(...));
此类的 iterator 和 listIterator 方法返回的迭代器是快速失败 的:在迭代器创建之后,如果从结构上对列表进行修改,除非通过迭代器自身的 remove 或 add 方法,其他任何时间任何方式的修改,迭代器都将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就会完全失败,而不冒将来不确定的时间任意发生不确定行为的风险。

注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何硬性保证。快速失败迭代器尽最大努力抛出 ConcurrentModificationException。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测程序错误。


这是从某个版本的JAVA API中贴出来的
他们继承的方法不一样,实现中也有一个不一样的

这个是属于多态
老紫竹 2009-09-02
  • 打赏
  • 举报
回复
    List list1 = new ArrayList(10);

List list2 = new LinkedList();


LinkedList没有int参数的构造函数
而且LinkedList进行Iterator时速度更高。
loveofmylife 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 bao110908 的回复:]
是的,这种称为多态,在面向对象设计上也符合里氏替换原则。
[/Quote]
不仅仅是多态吧,LinkedList实现了Queue接口啊,而ArrayList没有
  • 打赏
  • 举报
回复
是的,这种称为多态,在面向对象设计上也符合里氏替换原则。
chenchengamao 2009-09-02
  • 打赏
  • 举报
回复
我的回答和1楼差不多。
这样是多态的。
loveofmylife 2009-09-02
  • 打赏
  • 举报
回复
LinkedList和ArrayList的方法是相似的,只是底层结构不同,Linkedlist的插入删除的效率高,而且他即实现List接口,而且实现了Queue接口。而ArrayList的访问效率高,只实现一个list接口。
  • 打赏
  • 举报
回复
不一样

ArrayList 采用数组实现的,随机访问时效率很高
LinkedList 采用链表实现的,遍历、增加、删除的效率很高

根据具体应用的不同,选择一个不同的实现。
blueskyfly119 2009-09-02
  • 打赏
  • 举报
回复
明白了,多谢各位

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧