资讯专栏INFORMATION COLUMN

Java学习 -- 简单分析ArrayList实例化的过程

piglei / 3254人阅读

摘要:总结在实例化时,如果使用空参构造器指定初始化容量为或者指定的集合为空集合数组长度为,则在初始化时默认指向了一个共享的空数组,长度为。如果使用空参构造器实例化,则数组默认容量为。

ArrayList作为List接口的实现类,是Java为我们提供的一个容器,它对应着数据结构中的顺寻表结构,并且提供了一组针对于表中元素的增删改查操作。这里主要是简单分析一下ArrayList实例化的过程,以及它的扩容机制,这可以有助于我们更加深刻的理解顺序表结构,以及更好的使用ArrayList。如果有不正确地方,还请大佬们可以指出。

实例化

ArrayList中提供了3种重载的构造器:

  1. ArrayList()
ArrayList<Integer> list = new ArrayList<>();

  1. ArrayList(int initialCapacity)

    指定初始化容量

List<Integer> list = new ArrayList<>(255);

  1. ArrayList(Collection c)

Collection的实现类作为参数实例化ArrayList对象,该构造器会将参数对象中存储的元素拷贝到实例化的ArrayList对象中。

Collection<Integer> collection = new ArrayList<>(1);List<Integer> list = new ArrayList<>(collection);  // 参数的泛型必须是实例化对象指定的泛型或其子类

自动扩容

ArrayList()添加元素使用add()方法,该方法提供了几种重载形式,此处主要介绍add(E e)方法,以及在添加过程中的扩容机制。

总结

  1. ArrayList在实例化时,如果使用空参构造器指定初始化容量为0或者指定的集合为空集合(数组长度为0),则在初始化时默认指向了一个共享的空数组,长度为0。这是JDK8.0之后的改变,目的是节省资源。
  2. 当第一次添加元素时,才会在底层为该对象创建数组。如果使用空参构造器实例化list,则数组默认容量为10。
  3. 如果是其它另外两种情况,则数组默认容量为1。(size + 1)
  4. 当需要扩容时,会对数组进行1.5倍的扩容。

建议:在开发中使用带参构造器:ArrayList(int capacity);,目的是为了防止数组频繁扩容,提高效率。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/121632.html

相关文章

  • java基础巩固-泛型基础知识整理

    摘要:当某个类型变量只在整个参数列表的所有参数和返回值中的一处被应用了,那么根据调用方法时该处的实际应用类型来确定。即直接根据调用方法时传递的参数类型或返回值来决定泛型参数的类型。 标签: java [TOC] 本文对泛型的基本知识进行较为全面的总结,并附上简短的代码实例,加深记忆。 泛型 将集合中的元素限定为一个特定的类型。 术语 ArrayList -- 泛型类型 ArrayLis...

    KoreyLee 评论0 收藏0
  • 理解Java中的泛型(一)

    摘要:参数化的类型其中是参数化的类型。类型参数的实例或实际类型参数其中是类型参数的实例或实际类型参数。它们并没有重载,而且泛型中也不存在重载这一说法。除此之外,我们应该尽量地多用泛型方法,而减少对整个类的泛化,因为泛型方法更容易把事情说明白。 泛型是适用于许多许多的类型 ---《JAVA编程思想》 在Java的面向对象编程过程中, 或许你知道运用继承、接口等一系列面向对象的动作来实现代码复用...

    YFan 评论0 收藏0
  • 理解Java中的泛型(一)

    摘要:参数化的类型其中是参数化的类型。类型参数的实例或实际类型参数其中是类型参数的实例或实际类型参数。它们并没有重载,而且泛型中也不存在重载这一说法。除此之外,我们应该尽量地多用泛型方法,而减少对整个类的泛化,因为泛型方法更容易把事情说明白。 泛型是适用于许多许多的类型 ---《JAVA编程思想》 在Java的面向对象编程过程中, 或许你知道运用继承、接口等一系列面向对象的动作来实现代码复用...

    vboy1010 评论0 收藏0
  • java编程思想》—— 泛型

    摘要:引用泛型除了方法因不能使用外部实例参数外,其他继承实现成员变量,成员方法,方法返回值等都可使用。因此,生成的字节码仅包含普通的类,接口和方法。 为什么要使用泛型程序设计? 一般的类和方法,只能使用具体的类型:要么是基本类型,要么是自定义类的对应类型;如果要编写可以应用于多种类型的代码,这种刻板的限制对代码的束缚就会很大。----摘自原书Ordinary classes and meth...

    CODING 评论0 收藏0
  • Java相关

    摘要:本文是作者自己对中线程的状态线程间协作相关使用的理解与总结,不对之处,望指出,共勉。当中的的数目而不是已占用的位置数大于集合番一文通版集合番一文通版垃圾回收机制讲得很透彻,深入浅出。 一小时搞明白自定义注解 Annotation(注解)就是 Java 提供了一种元程序中的元素关联任何信息和着任何元数据(metadata)的途径和方法。Annotion(注解) 是一个接口,程序可以通过...

    wangtdgoodluck 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<