不逼自己一把,你永远不知道什么是绝望。
今天被初学java的朋友问到了String[]跟ArrayList是不是有关系呢?
猜测是名称之间的联想,记此篇解惑。
Array英语单词里是数组、阵列的意思,在java中数组是这样定义的:一组相关类型的变量集合。
格式:数据类型[] 数组名称 = new 数据类型[长度];
根据上边的格式,列举几个常见的数组,比如:String[] int[],如下是数组一些特点:
- 数组长度是固定的,无法实现动态扩容;
- 数组下标(从0开始)超出数组长度,数组越界异常(运行时异常);
- 数组中每个元素都有默认值,默认值是该数据类型默认值;
- 数组名称.length(属性):取得数组长度;
看完了上边的数组特点,再来看看ArrayList吧,他又是个啥呢?
ArrayList就是动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了动态的增加和减少元素,实现了ICollection和IList接口,灵活的设置数组的大小等好处 --- 百度百科
所以,看到这,已经明确String[]跟ArrayList是有点关系的了……
ArrayList是一个数组队列,相当于动态数组,与Java中的数组不同,数组一旦创建,长度固定,但是ArrayList的长度是动态的,不受限制,可以存储任意多的对象,但是只能存储对象,不能存储原生数据类型例如int(基本数据类型)。
如下是ArrayList的关系图:
- 继承于AbstractList,实现了List,提供了相关的添加、删除、修改、遍历等功能。
- 实现了RandmoAccess接口,即提供了随机访问的功能。RandmoAccess是java中用来被List实现,为List提供快速访问功能的。在ArrayList中,我们即可以通过元素的序号快速获取元素对象;这就是快速随机访问。
- 实现了Cloneable接口,即覆盖了函数clone(),能被克隆。
- 实现了java.io.Serializable接口,这意味着ArrayList支持序列化,能通过序列化去传输。
总之,ArrayList是非常重要的一个类,在代码中被广泛使用。
点个题,看一下数组与ArrayList的比较:
操作 | Array(String[]) | ArrayList |
---|---|---|
创建 | String[] array = new String[10]; | ArrayList list = new ArrayList<>(); |
访问一个元素 | array[index] | list.get(index); |
更新一个元素 | array[index] = "niceyoo"; | list.set(index, "niceyoo"); |
返回大小 | array.length | list.size(); |
排序 | java.util.Arrays.sort(array) | java.util.Collections.sort(arraylist) |
添加一个新元素 | 相当复杂 | list.add("niceyoo"); |
插入一个新元素 | 相当复杂 | list.add(index, "niceyoo"); |
删除一个元素 | 相当复杂 | list.remove(index); |
删除一个元素 | 相当复杂 | list.remove(Object); |
删除所有元素 | 稍微复杂 | list.clear(); |
我创建了一个用来记录自己学习之路的公众号,感兴趣的小伙伴可以关注一下微信公众号:niceyoo