写点什么

Java 进阶 (十七)ArrayList 与 LinkedList 的区别

  • 2022 年 9 月 13 日
    安徽
  • 本文字数:943 字

    阅读完需:约 3 分钟

Java进阶(十七)ArrayList与LinkedList的区别

​一、ArrayList

     ArrayList其实是包装了一个数组 Object[],当实例化一个ArrayList时,一个数组也被实例化,当向ArrayList中添加对象时,数组的大小也相应的改变。这样就带来以下优缺点:

  1. 快速随机访问。你可以随机访问每个元素而不用考虑性能问题,通过调用get(i)方法来访问下标为 i 的数组元素。

  2. 向其中添加对象速度慢。当你创建数组时并不能确定其容量,所以当改变这个数组时就必须在内存中做很多事情。

  3. 操作其中对象的速度慢。当你想在数组中任意两个元素中间添加对象时,数组需要移动后面所有的对象。

二、LinkedList

      LinkedList是通过节点直接彼此连接来实现的。每一个节点都包含前一个节点的引用,后一个节点的引用和节点存储的值。当一个新节点插入时,只需要修改其中保持先后关系的节点引用即可,删除记录时也一样。这样就带来以下优缺点:

  1. 操作对象的速度快。只需要改变连接,新的节点可以存储在内存中的任何地方。

  2. 不能随机访问。虽然存在get()方法,但是这个方法是通过遍历节点来定位的,所以速度慢。

  3. ArrayList在随机访问方面性能较好,有点像数组。而LinkedList在随机增删方面性能比较好,有点像链表。后者比较适合构造栈和队列。

     说白了,就是数据结构中的顺序存储和链式存储。

三、拓展阅读:java 使用 new Date()和 System.currentTimeMillis()获取当前时间戳

在开发过程中,通常很多人都习惯使用 new Date()来获取当前时间,使用起来也比较方便,同时还可以获取与当前时间有关的各方面信息,例如获取小时,分钟等等,而且还可以格式化输出,包含的信息是比较丰富的。但是有些时候或许你并不需要获取那么多信息,你只需要关心它返回的毫秒数就行了,例如 getTime()。为了获取这个时间戳,很多人也喜欢使用new Date().getTime()去获取,咋一看没什么问题,但其实没这个必要。其实看一下 java 的源码就知道了:

  public Date()
  {
    this(System.currentTimeMillis());
  }
复制代码

已经很明显了,new Date()所做的事情其实就是调用了System.currentTimeMillis()。如果仅仅是需要或者毫秒数,那么完全可以使用System.currentTimeMillis()去代替new Date(),效率上会高一点。况且很多人喜欢在同一个方法里面多次使用new Date(),通常性能就是这样一点一点地消耗掉,这里其实可以声明一个引用。



发布于: 刚刚阅读数: 6
用户头像

No Silver Bullet 2021.07.09 加入

岂曰无衣 与子同袍

评论

发布
暂无评论
Java进阶(十七)ArrayList与LinkedList的区别_Java_No Silver Bullet_InfoQ写作社区