黑马程序员技术交流社区

标题: 集合存储数据域数组存储数据的区别 [打印本页]

作者: 吴刚—heima    时间: 2013-5-31 14:55
标题: 集合存储数据域数组存储数据的区别
如题,请童鞋们回答一下。
作者: 胡浩    时间: 2013-5-31 14:59
区别呢是这样的:
1集合可以存储任何类型的数据,都可以放进去;数组只可以存储指定类型的数据。
2集合的存储空间是自动增长的;而数组的空间是固定的。
作者: zZZ~~    时间: 2013-5-31 17:34
数组与集合的区别:

一、容量大小:数组一旦定义后其容量大小固定,不能改变;而集合则可根据需要动态改变大小。在实际应用中我们不能确认的需要存放元素数量的时候,采用集合是比较好的。容量可变是集合相对于数组的最大区别。

二、数据类型:数组既可以容纳基本数据类型,也可以容纳对象,如String[] str;而集合只能容纳对象。(数组只能放一个类型的数据;集合若不使用泛型的话可以放进去任何类型的数据,一般都是用泛型来确定其内部数据类型)。

三、访问方式:数组要通过下标来访问其内部元素,而集合则通过Iterator的遍历来访问内部元素



作者: ____囧    时间: 2013-5-31 17:39
区别:
1.数组定义后容量固定.不能改变.而集合可以动态改变.
2.数组可以存放基本数据类型和对象.而集合只能存对象.

作者: 郭天龚    时间: 2013-5-31 18:26
数组与集合的区别:
1.空间大小:
集合:不必事先指定空间大小就可以使用,将元素存入,移除集合会动态放大缩小空间,来符合元素的存储情况,这是集合最大优点。
数组:必须在使用前指定空间大小,指定后无法改变,所以存储元素不能超过指定的大小,负责抛出ArrayIndexOutBoundsException异常。
2.数据类型
集合:只能存放对象,并且对象的类型可以是任意的。
数组:可以存放基本数据类型和对象,存放数组中的元素数据类型类型与数组所声明的数据类型要一致。
3.元素存去方式:
集合:1.使用for-each  2.使用Iterator对象。  3.转成数组取值。
数组:使用for循环并搭配角标值。


作者: 曹睿翔    时间: 2013-6-2 10:29
如果问题已经解决,再次编辑,修改主题类型为已解决,方便大家查看
否则继续追问
作者: 黄泉    时间: 2014-4-2 17:06
数组是JAVA语言内置的数据类型,它是一个线性的序列,所以它可以快速的访问其他的元素。但是速度是要有代价的,当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里是不能改变的。还有一点,JAVA里面的数组是会做边界检查的,所以当你越界访问时,会抛出RuntimeException,所以不用担心在C或C++因为不做边界检查而出现的问题了,当然边界检查是以牺牲效率为代价的。数组与其它容器类的区别体现在三个方面:效率、类型识别和可以持有primitives。
     JAVA里面提供的其他容器还包括List,Set和Map。他们处理对象的时候就好像这些这些对象都没有自己的类型一样,容器将它所含的元素都看成是JAVA中所有类的根类Object类型的,这样我们只需创建一种容器,就能把所有的类型的对象全部放进去。但是当取出的时候,那就需要我们自己进行类型转换了,不过在JAVA Tiger版里面新引入了“泛型”的概念,结合容器类一起使用就可以解决类型转换的问题,关于“泛型”这就不详细讲解了。从上面的角度来看,这种做法很不错,但是就是苦了primitives,如果是常量的话,可以把primitive转换成wrapper类然后放进容器里面,如果是变量的话,那就只能放在你自己的类里了。与其他容器类相比,数组会在编译的时候作类型检查,从而防止你插入错误类型的对象,或者在提取对象的时候把对象的类型给搞错了,JAVA在编译和运行的时候都能阻止你将一个不恰当的消息传给对象。至于效率,数组无疑是要高于其他容器类的,因为有些容器类的实现就是基于数组的,比如ArrayList。不论从类型检查还是效率的角度来考虑,我们首选数组来作为容器都是没错的,但是数组的缺点就是功能太弱了,所以才会有容器类的出现。
     要多说几句的就是,java.util包里面有一个Arrays类,它包括了一组可以用于数组的static的工具方法,其中最基本的是四个方法:用来比较两个数组是否相等的equals();用来填充数组的fill();用来对数组进行排序的sort();以及用于在一个已经排序的数组中查找元素的binarySearch()。所有这些方法都对primitives和Object进行了重载。此外还有一个asList()方法,它接受一个数组,然后把它转成一个List容器。JAVA标准类库还提供了一个System.arraycopy()的静态方法,它能以较快的速度拷贝数组,对primitive和Object都进行了重载,但是注意当对Object数组进行拷贝时,进行的是浅拷贝(shallow copy)。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2