黑马程序员技术交流社区
标题:
Array和ArrayList有哪些区别?
[打印本页]
作者:
乔玉吉
时间:
2012-3-19 21:49
标题:
Array和ArrayList有哪些区别?
Array和ArrayList有哪些区别?
作者:
李深山
时间:
2012-3-19 21:58
Array 类提供了动态创建和访问 Java 数组的方法。
ArrayList 接口的大小可变数组的实现。实现了所有可选列表操作,并允许包括 null 在内的所有元素。
作者:
叶绍亮
时间:
2012-3-19 22:04
ArrayList想象成一种“会自动扩增容量的Array”。
Array([]):最高效;但是其容量固定且无法动态改变;
ArrayList: 容量可动态增长;但牺牲效率;
Java中一切皆对象,Array也是对象。不论你所使用得Array型别为何,
Array名称本身实际上是个reference,指向heap之内得某个实际对象。
这个对象可经由“Array初始化语法”被自动产生,也可以以new表达式手动产生。
Array可做为函数返回值,因为它本身是对象的reference;
对象数组与基本类型数组在运用上几乎一模一样,唯一差别在于,前者持有得是reference,后者直接持有基本型别之值;
例如:
string [] staff=new string[100];
int [] num=new int[10];
容器所持有的其实是一个个reference指向Object,进而才能存储任意型别。当然这不包括基本型别,因为基本型别并不继承自任何classes。
面对Array,我们可以直接持有基本型别数值的Array(例如:int [] num;),也可以持有reference(指向对象)的Array;但是容器类仅能持有reference(指向对象),若要将基本型别置于容器内,需要使用wrapper类。但是wrapper类使用起来可能不很容易上手,此外,primitives Array的效率比起“容纳基本型别之外覆类(的reference)”的容器好太多了。
如果你的操作对象是基本型别,而且需要在空间不足时自动扩增容量,Array便不适合,此时就得使用外覆类的容器了。
对数组的一些基本操作,像排序、搜索与比较等是很常见的。因此在Java中提供了Arrays类协助这几个操作:sort(),binarySearch(),equals(),fill(),asList().
不过Arrays类没有提供删除方法,而ArrayList中有remove()方法,不知道是否是不需要在Array中做删除等操作的原因(因为此时应该使用链表)。
ArrayList的使用也很简单:产生ArrayList,利用add()将对象置入,利用get(i)配合索引值将它们取出。这一切就和Array的使用方式完全相同,只不过少了[]而已。
ArrayList是Array的复杂版本
ArrayList内部封装了一个Object类型的数组,从一般的意义来说,它和数组没有本质的差别,甚至于ArrayList的许多方法,如Index、IndexOf、Contains、Sort等都是在内部数组的基础上直接调用Array的对应方法。
类型识别:
ArrayList存入对象时,抛弃类型信息,所有对象屏蔽为Object,编译时不检查类型,但是运行时会报错。
ArrayList与数组的区别主要就是由于动态增容的效率问题了
ArrayList可以存任何Object,如String等。
作者:
朱鹏举
时间:
2012-3-19 22:07
Array:最高效;但是其容量固定且无法动态改变;
ArrayList: 容量可动态增长;但牺牲效率;
建议:
基于效率和类型检验,应尽可能使用Array,无法确定数组大小时才使用ArrayList!
不过当你试着解决更一般化的问题时,Array的功能就可能过于受限。
作者:
盛祖华
时间:
2012-3-19 22:29
ArrayList 类提供在大多数 Collections 类中提供但不在 Array 类中提供的一些功能。例如:
Array 的容量是固定的,而 ArrayList 的容量是根据需要自动扩展的。如果更改了 ArrayList.Capacity 属性的值,则自动进行内存重新分配和元素复制。
ArrayList 提供添加、插入或移除某一范围元素的方法。在 Array 中,您只能一次获取或设置一个元素的值。
使用 Synchronized 方法可以很容易地创建 ArrayList 的同步版本。而 Array 将一直保持它直到用户实现同步为止。
ArrayList 提供将只读和固定大小包装返回到集合的方法。而 Array 不提供。
另一方面,Array 提供 ArrayList 所不具有的某些灵活性。例如:
可以设置 Array 的下限,但 ArrayList 的下限始终为零。
Array 可以具有多个维度,而 ArrayList 始终只是一维的。
特定类型(不包括 Object)的 Array 的性能比 ArrayList 好,这是因为 ArrayList 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和取消装箱。
要求一个数组的大多数情况也可以代之以使用 ArrayList。它更易于使用,并且通常具有与 Object 类型的数组类似的性能。
Array 位于 System 命名空间中;ArrayList 位于 System.Collections 命名空间中。
作者:
李飞
时间:
2012-3-19 22:54
Array全部是静态方法,提供了动态创建和访问数组,允许在执行 get 或 set 操作期间进行扩展转换,但是如果发生收缩转换就会发出异常
ArrayList是一个集合,里面只能存储对象,其实底层封装的是数组,但是它的大小是可以改变的。可以存储相同的元素,元素可以为null,不同步的。容器中的数组需要用迭代器才能取出。对于元素的操作相对简单,但是元素没有哦下标值。可以将数组转换成集合排序,搜索等方法简便一些
Arrays一个对数组操作的方法,不必将数组转换成集合排序等,更方便一些
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2