在学习完泛型后,终于来到了顺序表~
顺序表说实话其本质底层就是一个数组。这时候就会有小朋友问了♀️:那么我们为什么要特意设置一个类来放置一个数组嘞为啥不直接创建一个数组来的快一些
设想一下,假如我们要得到一个数组的实际元素个数,要怎么得到?又或者我们要对数组进行增删查改等操作,如果要大量这么使用,可不可以设置一些方法来规范化立马就使用呢→这就是顺序表的作用啦。
在构造前,我们要注意导入import java.util.ArrayList;
先看下帮助手册里面介绍的ArrayList的构造方法
通过上图,我们可以知道ArrayList有三种构造方法,依次解释:
ArrayList arrayList = new ArrayList<>();
这种默认的初始构造方法在很多参考资料中描述的是初始就会有一个容量为十的空数组,其实这样子的说法是不够准确的,详情请看下面博主截取的原码
所以我们发现,刚调用默认构造方法的时候其实是数组大小是为0的,但是在很多参考资料上都会说该构造方法的默认大小为10,而且如果是0的话,那么后续又是这么放进去的嘞是个什么情况嘞接下来请再康康add的源码(博主吐血深扒源码)
总结:在刚用默认构造方法创建list的时候,还没有分配空间,直到调用add函数的时候,才会将默认数组的大小设置为10。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ArrayList arrayList = new ArrayList<>(15); //使得初始容量大小为15
该方法没有很多值得深究的地方,通过源码就可以知道其是怎样通过直接输入整形来控制初始数组容量大小的
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
public ArrayList(Collection extends E> c)
在经过学习了泛型与通配符后(ps:如果还没学过泛型或者不熟的朋友,可以看看博主写的另一篇博客,是有关泛型的),我们知道参数 c 必须是有Collection接口才的类才能放入,而该ArrayList顺序表可以限定的泛型数据为 E本身 或者其子类。如果还是不太清楚,可以看下面的代码
将上图中的代码里面红框部分全部改为Integer后,再经过下图的输出结果,我们可以得知
总结:该构造方法可以直接将原list复制过来,为浅拷贝。
迭代器(iterator):用于遍历,只有拥有Iterator这个接口的类才可以使用。
public static void main(String[] args) {
ArrayList arrayList = new ArrayList<>();
arrayList.add(1);
arrayList.add(2);
arrayList.add(3);
arrayList.add(4);
arrayList.add(5);
Iterator iterator1 = arrayList.iterator();
System.out.println("迭代器1:");
while(iterator1.hasNext()){
System.out.print(iterator1.next() + " ");
}
System.out.println();
Iterator iterator2 = arrayList.listIterator();
System.out.println("迭代器2:");
while(iterator2.hasNext()){
System.out.print(iterator2.next() + " ");
}
}
在学习了ArrayList过后,我们可以相对的做一些题目了,其中博主个人认为最经典的ArrayList题为杨辉三角,大家可以先点进去试着自己在经过上述学习后能否做出来,如果还有些困难,可以康康博主写的另一篇文章,里面会补充很多数据结构的题以及题解(广告时间)
以上!便是全部的啦
又是收获满满的一天~