前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >List以及其实现类(ArrayList、LinkList、Vector)简介

List以及其实现类(ArrayList、LinkList、Vector)简介

作者头像
洋仔聊编程
发布2019-01-15 16:43:19
8110
发布2019-01-15 16:43:19
举报
  • List
    • 本身是一个接口,实现了Collection接口,而Collection接口又继承了Iterable类,所以他的数据结构是有序可以重复的结合,并且可以迭代
    • 包涵一些基础的方法,不一一列举
  • 三个实现类(ArrayList、LinkList、Vector)
    • ArrayList
      • 1.概述:ArrayList是List接口的可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。除了实现 List 接口外,此类还提供一些方法来操作内部用来存储列表的数组的大小。
      • 2.相关方法
        • 构造方法: ArrayList提供了三种方式的构造器
          • 1.构造一个默认初始容量为10的空列表
          • 2:构造一个指定初始容量的空列表
          • 3:构造一个包含指定collection的元素的列表,这些元素按照该collection的迭代器返回它们的顺序排列的。
        • 存储方法

    • 还有一些相关的读取与删除\扩容等方法,不再一一列举
  • 3.底层数据结构:维护的是一个Object数组
    • 4.线程不安全
    • 5.查询速度快,增加删除慢
    • 6.当容量超过10后(因为默认的初始容量为10),会创建一个新的数组(新数组的容量是原数组的150%),并将原本的数组复制到该数组中,完成扩容..( 每个ArrayList实例都有一个容量,该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向ArrayList中不断添加元素,其容量也自动增长。自动增长会带来数据向新数组的重新拷贝,因此,如果可预知数据量的多少,可在构造ArrayList时指定其容量。在添加大量元素前,应用程序也可以使用ensureCapacity操作来增加ArrayList实例的容量,这可以减少递增式再分配的数量。 )
  • 在源码中,计算原本容量的一半,是通过右移实现的
  • 在grow()方法中进行扩容
  • 源代码如下
  • LinkList
    • 1.底层维护的是一个链表,并且是一个双向链表,所以顺序访问会非常高效,随机访问效率低。
    • 2.使用Node类型的结点表示链表的相关信息(以前是使用的Entry),Node为LinkList的一个内部类
    • 3.因为是链表不存在LinkedList容量不足的问题,除非内存不足。
    • 4.增删速度快,查询速度慢
  • Vector
    • 1.底层维护的是一个Object数组结构
    • 2.线程安全,会发生并发问题的方法都用了synchronize修饰
    • 3.没有ArrayList的效率高,因为同步会进行上下文切换,这也会导致cpu资源的消耗
    • 4.当容量超过10后(因为默认的初始容量为10),会创建一个新的数组(新数组的容量是原数组的200%),并将原本的数组复制到该数组中,完成扩容..所以Vector比ArrayList更消耗内存.
      • 在源码中是通过相加两个当前容量来定义新数组的容量的
      • 在grow()方法中进行扩容
      • 源代码
    • ArrayList与Vector
      • 1.Vector是线程同步的,所以它也是线程安全的。而ArratList是线程异步的,不安全.所以ArrayList效率比较高。如果不考虑安全因素,一般用Arralist,,如果在多线程环境下最好使用Vector。
      • 2.Vector在容量不足时,以原数组100%的容量扩容,而ArrayList是按照原数组的50%容量扩容,所以在数据量比较大的时候使用Vector比较好,可以建设扩容 次数。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年03月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档