问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

JAVA集合框架的数组与容器

发布网友 发布时间:2022-03-23 06:23

我来回答

1个回答

热心网友 时间:2022-03-23 07:52

数组与其它容器的区别体现在三个方面:效率,类型识别以及可以持有primitives。数组是Java提供的,能随机存储和访问reference序列的诸多方法中的,最高效的一种。数组是一个简单的线性序列,所以它可以快速的访问其中的元素。但是速度是有代价的;当你创建了一个数组之后,它的容量就固定了,而且在其生命周期里不能改变。也许你会提议先创建一个数组,等到快不够用的时候,再创建一个新的,然后将旧的数组里的reference全部导到新的里面。其实(我们以后会讲的)ArrayList就是这么做的。但是这种灵活性所带来的开销,使得ArrayList的效率比起数组有了明显下降。
Java对数组和容器都做边界检查;如果过了界,它就会给一个RuntimeException。这种异常表明这个错误是由程序员造成的,这样你就用不着再在程序里面检查了。
还有一些泛型容器类包括List,Set和Map。他们处理对象的时候就好像这些对象都没有自己的具体类型一样。也就是说,容器将它所含的元素都看成是(Java中所有类的根类)Object的。这样你只需要建一种容器,就能把所有类型的对象全都放进去。从这个角度来看,这种作法很不错(只是苦了primitive。如果是常量,你还可以用Java的primitive的Wrapper类;如果是变量,那就只能放在你自己的类里了)。与其他泛型容器相比,这里体现数组的第二个优势:创建数组的时候,你也同时指明了它所持有的对象的类型(这又引出了第三点--数组可以持有primitives,而容器却不行)。也就是说,它会在编译的时候作类型检查,从而防止你插入错误类型的对象,或者是在提取对象的时候把对象的类型给搞错了。Java在编译和运行时都能阻止你将一个不恰当的消息传给对象。所有这并不是说使用容器就有什么危险,只是如果编译器能够帮你指定,那么程序运行会更快,最终用户也会较少收到程序运行异常的*扰。
从效率和类型检查的角度来看,使用数组总是没错的。但是,如果你在解决一个更为一般的问题,那数组就会显得功能太弱了点。
不管你用的是那种类型的数组,数组的标识符实际上都是一个“创建在堆(heap)里的实实在在的对象的”reference。实际上是那个对象持有其他对象的reference。你即可以用数组的初始化语句,隐含地创建这个对象,也可以用new表达式,明确地创建这个对象,只读的length属性能告诉你数组能存储多少元素。它是数组对象的一部分(实际上也是你唯一能访问的属性或方法)。‘[]’语法是另一条访问数组对象的途径。
你没法知道数组里面究竟放了多少元素,因为length只是告诉你数组能放多少元素,也就是说是数组对象的容量,而不是它真正已经持有的元素的数量。但是,创建数组对象的时候,它所持有的reference都会被自动地初始化为null,所以你可以通过检查数组的某个“槽位”是否为null,来判断它是否持有对象。以此类推,primitive的数组,会自动来数字初始化为零,字符初始化为(char)0,boolean初始化为false。
容器类只能持有Object对象的reference。而数组除了能持有Objects的reference之外,还可以直接持有primitive。当然可以使用诸如Integer,Double之类的wrapper类。把primitive的值放到容器中,但这样总有点怪怪的。此外,primitive数组的效率要比wrapper类容器的高出许多。
当然,如果你使用primitive的时候,还需要那种“能随需要自动扩展的”容器类的灵活性,那就不能用数组了。你只能用容器来存储primitive的wrapper类。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
车搭电正负极怎么接 勾车线怎么接 我想自己创业,但是我只会做理发这行,我想要改行,想多赚点钱。 作为一名新幼儿教师如何正确树立自己的职业理想 2024年江苏物理类619分能考上什么大学? 2023北京985/211率出炉!北京学生上名校到底难不难? 多少分能考上宁波诺丁汉大学 2024年浙江618分能考上什么大学? 2024年浙江627分能考上什么大学? 2024年浙江619分能考上什么大学? 软考(高级)的教材有哪些? word文档锁定不能编辑怎么办--Windows Mobile word文档打开后提示:已被另一用户锁定,无法编辑..怎么办? word文档被锁住了,怎么解锁 2010版的word文档不能编辑,内容被锁定,怎么办? Word被锁定怎么解锁? 学完Java能够做什么? 太原有什么特产呀 太原有什么特产啊 太原的特产有什么可以带走的? 太原的特产有些什么 山西太原特产有哪些土特产 java 后台开发人员需要掌握哪些工具 ccna考试要考哪些啊,最好详细点,准备考CCNA CCNA主要考什么? 信息系统项目管理师对找工作有什么用 现在做项目常用的JAVA框架有哪些 javaee为什么要用框架框架能做什么能省去什么现在用什么框架好 2010年下半年为什么没有系统分析师的考试?我即将升入大三学习,各位认为我应该在现在参加高级考试吗 计算机软考高级职称的区别与难度? 小米3充电发热 为什么小米3的充电器充电会发热 小米3手机充电气发热怎么办 小米3手机发热怎么解决 小米3手机发热是怎么回事 小米3手机充电 充电头会发热。 小米3手机发烫是什么原因 小米3手机发热怎么回事 小米3手机发烫是什么原因? 为什么用小米移动电源给小米3充电的时候手机会发烫 小米3手机待机发热是怎么回事 小米3为什么发热 小米3手机老发热?是怎么回事,正常吗 刚买的小米3,充电时电源适配器很烫,属于正常现象么? 软考高级信息系统项目管理师的通过率是怎么设定的? 小米3边充电边玩会发热吗 手机充电时小米充电器会发烫是有什么问题吗? 要一个能把flac转换成MP3的免费软件 户外运动鞋如何清洗 按步骤依次清洁做好鞋子保养 洗运动鞋用什么洗干净