在上一期用ArrayList实现了玩牌,但没有正式介绍它,今天咱们来好好唠一唠这个ArrrayList
主要从以下几个方面来介绍
🎆ArrayList在集合框架中的位置
🎇ArrayList的方法介绍以及实现
🚀从源码认识ArrayList的扩容机制
🧶ArrayList的遍历
🚀ArrayList实现杨辉三角
1.ArrayList在框架中的位置
蓝色的代表类之间的继承
红色的代表类继承了接口,以及接口和接口之间的拓展
ArrayList继承了AbstractList类,实现了List接口
ArrayList实现了RandomAccess接口,说明ArrayList支持随机访问
ArrayList实现了List接口,它是以泛型形式实现的,使用时必须实例化
实现了Cloneable接口,可以被克隆
实现了Serializable接口,表示可以被序列化,意思就是字符串转数组,那么数组转字符串叫做反序列化
Arraylist不是线程安全的,只在单线程中使用,多线程中使用Vector
ArrayList底层是一段连续的空间,是可以动态扩容的,是动态的顺序表
既然AarrayList是一个类,那么就要从它的构造方法去认识它
上面三个是ArrayList类的构造方法
第一个构造方法是无参构造
第二个构造方法是实现Collection类的接口帮助ArrayList实现构造
第三个构造方法是 指定顺序表的初始容量
和顺序表一样,ArrayList也有增删查改的基本操作,但在这里不用再进行具体实现了,因为和顺序表的增删查改的实现思路是一样的,直接用就好了,Java提供了库方法
public class ArrayList{ public static void main(String[] args) { List<Integer> list=new java.util.ArrayList<>();//new一个ArrayList类的对象, list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); System.out.println(list); list.size(); System.out.println(list.size()); list.add(6); System.out.println(list); list.remove(2);//根据下标进行删除 System.out.println(list); list.remove(new Integer(5));//根据对象中某个具体的数进行删除 System.out.println(list); list.get(3); System.out.println(list); list.set(1,10); System.out.println(list); List<Integer> ret= list.subList(0,2); System.out.println(ret); }
public static void main(String[] args) { List<Integer> list=new ArrayList<>(); list.add(1); list.add(2); list.add(3); System.out.println(list); ArrayList<Number> arrayList1=new ArrayList<>(list); System.out.println(arrayList1); arrayList1.add(10); arrayList1.add(25); System.out.println(arrayList1); }
这里有个比较容易忽略的点
绿色圈出来的两个框,第一个泛型中Integer是Number 的子类,所以也可以像第一个那样写
Collection其他的接口帮助ArrayList构造
现在来看看ArrayList的源码扩容机制
大致看看源码,知道ArrayList默认是1.5倍的扩容就好
ArrayList的遍历
它的遍历有三种方式
1.for循环
2.for each 循环
3.迭代器(这个不咋用)
public static void main(String[] args) { List<Integer> list=new ArrayList<>(); list.add(1); list.add(2); list.add(3); list.add(4); for(int i=0;i<list.size();i++){ System.out.println(list.get(i)+" "); } System.out.println("====="); for ( Integer x:list) { System.out.println(x); } //使用迭代器 ListIterator<Integer> iterator=list.listIterator() while (iterator.hasNext()) { System.out.print(iterator.next()+" "); } }
最后为大家带来杨辉三角的实现
public List<List<Integer>> generate(int numRows) { List<List<Integer>> list =new ArrayList<>(); List<Integer> row=new ArrayList<>(); row.add(1); list.add(row); for(int i=1;i<numRows;i++){ List<Integer> prevRow=list.get(i-1); List<Integer> curRow=new ArrayList<>(); curRow.add(1); for(int j=1;j<i;j++){//中间放的那个数 int x=prevRow.get(i-1)+prevRow.get(j-1); curRow.add(x); } curRow.add(1); list.add(curRow); } return list; } }
今天的讲解就到这,我们下期再见了,886!!!