1)精辟阐述:
可以将 ArrayList想象成一种“会自动扩增容量的Array”。

2)Array([]):最高效;但是其容量固定且无法动态改变;
     ArrayList:  容量可动态增长;但牺牲效率;

3)建议:
基于效率和类型检验,应尽可能使用Array无法确定数组大小时才使用ArrayList
不过当你试着解决更一般化的问题时,Array的功能就可能过于受限。

4)Java中一切皆对象,Array也是对象。不论你所使用得Array型别为何,

Array名称本身实际上是个reference,指向heap之内得某个实际对象。

这个对象可经由“Array初始化语法”被自动产生,也可以以new表达式手动产生。

5)Array可做为函数返回值,因为它本身是对象的reference;

6)对象数组与基本类型数组在运用上几乎一模一样,唯一差别在于,前者持有得是reference,后者直接持有基本型别之值;
例如:
string [] staff=new string[100];
int [] num=new int[10];

7)容器所持有的其实是一个个reference指向Object,进而才能存储任意型别。当然这不包括基本型别,因为基本型别并不继承自任何classes。

8)面对Array,我们可以直接持有基本型别数值的Array(例如:int [] num;),也可以持有reference(指向对象)的Array;但是容器类仅能持有reference(指向对象),若要将基本型别置于容器内,需要使用wrapper类。但是wrapper类使用起来可能不很容易上手,此外,primitives Array的效率比起“容纳基本型别之外覆类(的reference)”的容器好太多了。

当然,如果你的操作对象是基本型别,而且需要在空间不足时自动扩增容量,Array便不适合,此时就得使用外覆类的容器了。

9)某些情况下,容器类即使没有转型至原来的型别,仍然可以运作无误。有一种情况尤其特别:编译器对String class提供了一些额外的支持,使它可以平滑运作。

10)对数组的一些基本操作,像排序、搜索与比较等是很常见的。因此在Java中提供了Arrays类协助这几个操作:sort(),binarySearch(),equals(),fill(),asList().

不过Arrays类没有提供删除方法,而ArrayList中有remove()方法,不知道是否是不需要在Array中做删除等操作的原因(因为此时应该使用链表)。

11)ArrayList的使用也很简单:产生ArrayList,利用add()将对象置入,利用get(i)配合索引值将它们取出。这一切就和Array的使用方式完全相同,只不过少了[]而已。

2.参考资料:
1)效率:
数组扩容是对ArrayList效率影响比较大的一个因素。
每当执行Add、AddRange、Insert、InsertRange等添加元素的方法,都会检查内部数组的容量是否不够了,如果是,它就会以当前容量的两倍来重新构建一个数组,将旧元素Copy到新数组中,然后丢弃旧数组,在这个临界点的扩容操作,应该来说是比较影响效率的。

ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。

2)类型识别:
ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错。
ArrayList与数组的区别主要就是由于动态增容的效率问题了

3)ArrayList可以存任何Object,如String等。

转载于:https://www.cnblogs.com/LittleSpring/p/9542944.html

Array and ArrayList相关推荐

  1. java中Array和ArrayList区别

    2019独角兽企业重金招聘Python工程师标准>>> 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array". 2)Array([] ...

  2. java中Array和ArrayList区别 可以将 ArrayList想象成一种会自动扩增容量的Array

    java中Array和ArrayList区别 1)精辟阐述: 可以将 ArrayList想象成一种"会自动扩增容量的Array https://blog.csdn.net/ywjy10280 ...

  3. How to Convert Array to ArrayList in Java?

    2019独角兽企业重金招聘Python工程师标准>>> This article analyzes answers for a top-voted questions on Stac ...

  4. Array和ArrayList区别

    Array和ArrayList区别 Array 在C#中的数组也是对象,实际上是Array类的实例. 主要区别 Array类型的变量在声明的同时,必须进行实例化,至少是初始化数组的大小,而 Array ...

  5. array,arraylist,string的总结

    import java.util.ArrayList;/* * 这个程序是对array,arraylist,string的总结 * 1.创建 *(1)数组:分为动态初始化和静态初始化.(动态初始化时其 ...

  6. 基础回顾(正则、循环、和、 int和Integer、String /StringBuffer、Array和ArrayList、值传递和引用传递、 Lamda、java8)

    1. 正则表达式 1.1 Java中是如何支持正则表达式操作的? Java中的String类提供了支持正则表达式操作的方法,包括:matches().replaceAll().replaceFirst ...

  7. arraylist 线程安全_数据结构之Array、ArrayList、List、LinkedList对比分析

    作者:小许子 https://www.cnblogs.com/xiaoXuZhi/p/XYH_dataStructureTest_array.html 一.前言: 在c#数据结构中,集合的应用非常广泛 ...

  8. Java中Array和ArrayList之间的9个区别

    array和ArrayList都是Java中两个重要的数据结构,在Java程序中经常使用. 即使ArrayList在内部由数组支持,了解Java中的数组和ArrayList之间的差异对于成为一名优秀的 ...

  9. Java ArrayList的Array,Array的ArrayList

    Today we will learn how to create a Java array of ArrayList. We will also learn how to create an Arr ...

  10. 如何在Java中使用Array实现ArrayList

    ArrayList is the most popular implementation of List in java. ArrayList是java中List的最受欢迎的实现. ArrayList ...

最新文章

  1. 人工智能元老痛批IBM:沃森是个骗局,这根本不是认知
  2. ArcGIS API for JavaScript 4.4学习笔记[新] AJS4.4和AJS3.21新特性
  3. 扣押游戏android,恐怖探索游戏「扣押(DISTRAINT)」
  4. 如何使用 Javascript/node.js 在 WebRTC 中构建音视频通话APP?
  5. 云服务器带宽如何计算,云服务器怎么选择带宽
  6. 解决Linux操作系统下AES解密失败的问题
  7. 剑指offer——12.矩阵中的路径(不熟)
  8. 虚拟机上安装Linux时出现的问题及解决方法
  9. 用glew,glfw实现opengl绘制3D学习笔记1-实现一个窗口
  10. 《网络与信息安全B》教学大纲
  11. ca证书申请流程有哪些?
  12. fillna填充某一列_DataFrame基础运算以及空值填充的案例分析
  13. linux返回上一行命令行,linux命令行编辑快捷键
  14. Revit二次开发——布管系统设置
  15. windows7环境下VS2010中文版本配置MPI开发环境图文教程
  16. java 英文月份_java SimpleDateFormat处理英文3位字母月份时的注意事项
  17. 自动驾驶是一门怎样的生意?盘点5家创业公司商业落地的3条逻辑...
  18. outlook 默认打开ie_如何使用OUTLOOK联系人取代手机联系人,实现电脑和手机联系人、日历、待办的同步...
  19. 20220827 360笔试
  20. 突发事件检测: kleinberg 状态机模型

热门文章

  1. 使用FFmpeg实现抽取多媒体文件的音频并按照AAC格式进行保存--附源码
  2. 10 个常用的软件架构模式
  3. SpringBoot 集成ip2region
  4. 操作系统(三十一)死锁的检测和解除
  5. 【动态规划】分组背包
  6. replugin源码解析之replugin-plugin-gradle(插件的gradle插件)
  7. Tensorflow[基础篇]——LSTM的理解与实现
  8. 进程间通信--IPC
  9. java符号引用 直接引用_JVM的符号引用和直接引用
  10. python len ljust_Python string.ljust方法代码示例