A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄克帅 中级黑马   /  2012-5-22 20:36  /  3018 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄克帅 于 2012-6-11 13:30 编辑

数组与集合有什么区别?  什么时候用数组,什么时候用集合?

3 个回复

倒序浏览
数组:数组是java语言内置的数据类型,他是一个线性的序列,所有可以快速访问其他的元素,数组和其他语言不同,当你创建了一个数组时,他的容量是不变的,而且在生命周期也是不能改变的,还有JAVA数组会做边界检查,如果发现有越界现象,会报RuntimeException异常错误,所有不用担心和C和C++一样不做边界检查而出现的问题,当然检查边界会以效率为代价,数组和其他容器体现在3个方面:1.效率2.类型识别3.可以持有primitives。
集合: JAVA还提供其他容器,list,map,set,他们处理对象的时候就好像这些对象没有自己的类型一样,而是直接归根于Object,这样只需要创建一个容器,把对象放进去,取出时转换成自己的类型就行了,
ArrayList:JAVA包里有一个java.util.ArrayLisy的类,他包括可以用以static的工具方法,其中最基本的4个方法:1用来比较2个数组是否相等的eques()2用来填充数组的fill()3用来排序数组的sort()4以及用于在一个已经排序的数组中查找元素的binarySearch()。

这些方法都是对primitives和Object进行了重载,此外还有一个asList()方法,它接受一个数组,然后把它转成一个List容器

此为java标准库还提供了一个 System.arraycopy();的静态方法,能够以较快的速度拷贝数组,对primitive和Object进行了重载,要注意的是,当进行Obeject拷贝的时候,进行的是浅拷贝;
区别:

至于效率,数组无疑是高过其他容器的,因为有些容器类的实现就是基于数组的,比如ArrayList,不论是效率还是类型检查,无疑是先考虑数组的,但是数组最大的弱点就是功能太弱小,所有才会有其他容器的出现。

评分

参与人数 1技术分 +1 收起 理由
admin + 1

查看全部评分

回复 使用道具 举报
1.数组是固定大小的,不能伸缩。虽然System.Array.Resize这个泛型方法可以重置数组大小,
      但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的
  2.数组要声明元素的类型,集合类的元素类型却是object.
  3.数组可读可写不能声明只读数组。集合类可以提供ReadOnly方法以只读方式使用集合。
  4.数组要有整数下标才能访问特定的元素,然而很多时候这样的下标并不是很有用。集合也是数据列表却不使用下标访问。
      很多时候集合有定制的下标类型,对于队列和栈根本就不支持下标访问!
回复 使用道具 举报
向楼上学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马