一、什么是集合
集合是一种变量,一种容器,可以同时存储多个数据信息。
那么有人就要问了,这功能数组也行啊,那我为什么要学习集合,岂不是多此一举吗?
二、为什么要引入集合,数组的缺点
a)数组的空间长度一旦确定,就不可改变
数组的使用分为四步,声明数组,分配空间,赋值,使用。
其中分配空间导致了一个十分不舒服的事情,空间分配少了不够用报错。
那又有人说了,大不了我新建一个更大的数组存不就是了。
那我问你,那空间分配多了怎么办,多几个倒也还好,多几十上百那不纯浪费吗,手动创建不累吗,这次加一点,下次加一点,不够了又要再次重建一个更大的数组。
由此,集合的一个特点就是空间长度可以随着储存元素的个数的增多自动改变,比如ArrayList需要增长长度时自动增长50%,虽说随着数组储存元素过多也会有浪费出现,但是它自动增长啊。
b)数组内真实存储的元素个数不确定
数组想要知道其中具体的真实元素需要循环遍历一遍来确认,对于日后添加删除时及其不友好,还需要先查询一遍。
集合中有size()方法可以直接获得内部真实元素个数,在编程中可减少一些流程。
c)数组只能存储有序,可重复的元素
对于一些有去重要去的,无序要求的,数组满足不了。
那又有人要说了,我添加的时候先循环一遍顺带判定,无序我就随机分配位置,空地方先写个用不上的数字顶上不就好了。
大可不必,集合对于有序不唯一的可以用List及其子类存储,对于无序唯一的可以使用Set及其子类存储。
兄弟们可能会问对于有序唯一等类型的数据怎么办,有的兄弟,有的,像这样的数据,集合都有特定的去存储,到时候自己查一下就好了。
d)数组只能存储同一种类型的数据
集合可以存储多种不同类型的数据在一个集合中,但不建议用,仅限于了解就行,正常情况下也不会用。
三、集合和数组的差异
看到这里,兄弟们可能会问难道我们数组就没有什么特殊之处吗?有的兄弟,有的。
a)存储数据类型不同
数组能存储基本数据类型和引用数据类型。
集合只能存储引用数据类型。
集合的泛型设计基于对象,无法直接存储基本数据类型,当向集合添加基本类型时,Java会自动将其转换为对应的包装类。
集合有三个知识点,泛型,自动拆装箱,增强for循环,有兴趣的同学可以先自行了解,或者之后等我写一篇集合补充。
b)擅长领域不同
数组不擅长插入和删除,由于其连续的特性,每次插入和删除都需要移动后续所有元素,添加还涉及到扩容问题。
集合由于自动扩容,其内存占比是比较高的,而且由于其特性,部分集合并不擅长随机访问,在这方面比不上数组。
而且大多数集合也不保证线程安全,部分集合存储数据也是无序。
四、结语
在未来,我们并不是摒弃了数组,只是在存储方式上多了一种选择,对于某些特定情况,还是数组更有力,顺带说一嘴,如同ArrayList、Vector等部分集合底层实际是用数组实现的。
评论前必须登录!
注册