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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 朱盛文 中级黑马   /  2013-3-16 20:56  /  1825 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 朱盛文 于 2013-3-16 23:22 编辑

如题,集合与数组的相同点和不同点分别是什么?分别在什么情况下使用?

评分

参与人数 1黑马币 +9 收起 理由
黄玉昆 + 9

查看全部评分

9 个回复

倒序浏览
集合是一个能存放对象的类或接口,Collection是集合框架的跟接口,下属的有Set和List子接口,它们分别有相应的实现类。如:ArrayLisit,LinkedList;Hashset,TreeSet;
ArrayList集合和数组的关系,因为ArrayList集合的底层是数组结构,
ArrayList集合和数组的区别就是,ArraylList是一个类,可以创建实例对象,提供了很多操作数据的特有方法,用起来比数组简单。
数组在创建时必须制定类型和参数个数,或初始化,而ArrayList不用。
ArrayList还可以随时对集合中的元素进行增删盖查操作。
当然还还有其他的集合,有很多功能,这里不多说了。

评分

参与人数 1黑马币 +9 收起 理由
黄玉昆 + 9

查看全部评分

回复 使用道具 举报
我在百度上搜了一些,希望能帮助楼主,总之大家一起学习吧,先发链接http://zhidao.baidu.com/question/68633287.html
以下是内容:
数组是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)。

评分

参与人数 1黑马币 +9 收起 理由
黄玉昆 + 9

查看全部评分

回复 使用道具 举报
HM王琦 发表于 2013-3-16 21:21
集合是一个能存放对象的类或接口,Collection是集合框架的跟接口,下属的有Set和List子接口,它们分别有相 ...

就是说数组一旦创建,就被赋予了其特定的属性,包括存储的数据类型和长度?那以后还可以更改吗?集合的数据类型和长度呢?
回复 使用道具 举报
    相同点:都是容器,都能存储对象。
    不同点:数组可以存储基本数据类型也可以存储对象,但集合只能存储对象。
            数组在定义的时候就会确定好容器的大小,集合不会固定容器的大小。
            数组的方法功能比较单一,集合对象的方法功能比较丰富。
    总之:数组一切都ok,大小固定。
          集合是容器大小不固定的只能存储对象的容器。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
朱盛文 发表于 2013-3-16 21:57
就是说数组一旦创建,就被赋予了其特定的属性,包括存储的数据类型和长度?那以后还可以更改吗?集合的数 ...

数组的长度是不可以更改的,而集合的的长度是随添加在里面的元素个数改变的,可以通过size()方法获取,里面的元素个数。
回复 使用道具 举报
数组可以用String  int 之类的,
而集合包含的很多例如 泛型,要求必须是一个对象,泛型也可以不用写,遍历集合时需要强转。
数组赋值是下标赋值
集合时对象.add
回复 使用道具 举报
相同点:都是容器,都能存储数据
              都是工具类,方法都是在java.util.*里
不同点:容量:数组的length固定,集合的size不固定
              成员:类型:数组什么类型的成员都可以,结合只能放引用类型对象(对象里想放基本类型,就得用到基本类型包装类了)
                        种类:数组里只能放一种类型的元素。集合则在这方面毫无限制。
              查询速度:数组组快
             方法操作:集合可以进行迭代、删除、插入等等操作,数组则不可以,集合的方法更多,数组比较单一
              复杂度:不用说了,必然集合更复杂
总结:数组以牺牲灵活性为代价成就了它的高效率,但是在需要较复杂的容器时,数组明显就不如集合了(容量固定很让人不爽的),更别说集合还有以数组为底层结构,性能也比数组仅仅差距仿佛的ArrayList。
另外答LZ上面的疑问,数组的容量和类型是不可更改的,集合可以,而这也正是集合相比数组的最大优势。

评分

参与人数 1技术分 +1 收起 理由
贾文泽 + 1

查看全部评分

回复 使用道具 举报
聂斌 中级黑马 2013-3-17 02:57:53
9#

数组是固定长度的,,集合是可变长度的

集合里面可以同时存不同的对象,,而数组只能存同一种类型的对象,,因为在定义数组的时候就指定了数组里面元素的类型比如char[]

为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。

集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。



回复 使用道具 举报

为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。

集合类的特点:
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。

数组和集合类同是容器,有何不同?
1.数组虽然也可以存储对象,但长度是固定的;集合长度是可变的。

2.数组只能放置同一种数据类型因为在定义数组的时候就指定了数组里面元素的类型比如String[],对于集合而言,里面元素可以是不同类型的元素;

3.至于效率,数组无疑是高过其他容器的,因为集合都是基于数组来实现的,集合对数组做了封装,所以,数组永远比任何一个集合要快,,,比如ArrayList,不论是效率还是类型检查,无疑是先考虑数组,但是数组最大的弱点就是功能太弱小,所有才会有集合容器的出现。


5.集合中提供了很多的方法操作里面的元素,,采用集合对数据的操纵会很容易;
比如list集合的方法remove(object),里面参数可以是object也可以是int类型的角标,,这样删除元素极为方便,,可以根据角标和具体的元素进行删除而数组就不能了,,
另外map集合存放的是键值对信息,,他比数组更为强大,,,map集合可根据具体点的键值查询到对应的值,,查询效率比数组高很多,,数组只能根据角标进行获取,,,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马