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 等。
分享到:
相关推荐
主要介绍了Java Array与ArrayList区别详解的相关资料,需要的朋友可以参考下
Java的Array和ArrayList教程by程谱CodeRecipe,适合学过Java入门教程的初学者使用,支持用来备考AP哦~.zip
用java自己实现的arrayList,比较详细,有助于初学者理解arrayList的基本概念和基础用法
简单的介绍array的基本用法. 注:不是ArrayList!
day14-ArrayList集合 1.ArrayList 1.1ArrayList类概述【理解】 什么是集合 提供一种存储空间可变的存储模型,存储的数据容量可以发生改变 ArrayList集合的特点 ...底层是数组实现的,长度可以...array.add("java");
Jarraypool Java Array和ArrayList池Factory,支持非池化堆,非池化不安全,堆池,不安全池。 数组:IntArray,LongArray,ShortArray,CharArray,BooleanArray,StrArray,DecimalArray ArrayList:IntArrayList,...
动态数组我们在Java中看到的基本上是ArrayList
主要介绍了java使用ArrayList遍历及效率比较,实例分析了ArrayList遍历的方法与使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
关于数组Array,ArrayList,泛型List,简单的说数组就是值对象,它存储数据元素类型的值的一系列位置.Arraylist和list可以提供添加,删除,等操作的数据. 具体如何进行选择使用呢,我们来详细探讨下
ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了Collection和List接口,可以灵活的设置数组的大小。要注意的是ArrayList并不是线程安全的,因此一般建议在单...
ArrayList深度剖析与简单实用、 ArrayList重要的方法和属性(1)构造器 ArrayList提供了三个构造器 Count属性和Capacity属性 4、ArrayList与数组转换 Array的复杂版本 ArrayList常用方法 ArrayList同步机制 ...
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class ArrayListDemo { public static void main(String args[]){ List<String> list = new ArrayList(); list.add(...
ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,下面来简单介绍下
28. Array 和 ArrayList 有何区别? 29. 在 Queue 中 poll()和 remove()有什么区别? 30. 哪些集合类是线程安全的? 31. 迭代器 Iterator 是什么? 32. Iterator 怎么使用?有什么特点? 33. Iterator 和 ...
主要是画图程序的一个类import java.awt.*; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.util.ArrayList; import javax....
java算法中常用的数据结构和方法,包括Array\ArrayList、List、Map等
ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处
differ.java 测试静态方法与实例方法之间的区别 forefather.java 一个简单的基类 grandson.java 上面这个类的子类 hasConstructor.java 拥有构造器的类 hasFinalFun.java 拥有最终方法的类 hasRecall.java ...
学习了ArrayList集合类后练习仿写的一个小管理系统,功能简单。