认识ArrayList

简介: 认识ArrayList

在上一期用ArrayList实现了玩牌,但没有正式介绍它,今天咱们来好好唠一唠这个ArrrayList

主要从以下几个方面来介绍

🎆ArrayList在集合框架中的位置

🎇ArrayList的方法介绍以及实现

🚀从源码认识ArrayList的扩容机制

🧶ArrayList的遍历

🚀ArrayList实现杨辉三角

1.ArrayList在框架中的位置


aebdb2f698e041f6b9b2ff79006a9740.png蓝色的代表类之间的继承


红色的代表类继承了接口,以及接口和接口之间的拓展


ArrayList继承了AbstractList类,实现了List接口


ArrayList实现了RandomAccess接口,说明ArrayList支持随机访问


ArrayList实现了List接口,它是以泛型形式实现的,使用时必须实例化


实现了Cloneable接口,可以被克隆


实现了Serializable接口,表示可以被序列化,意思就是字符串转数组,那么数组转字符串叫做反序列化


Arraylist不是线程安全的,只在单线程中使用,多线程中使用Vector


ArrayList底层是一段连续的空间,是可以动态扩容的,是动态的顺序表


既然AarrayList是一个类,那么就要从它的构造方法去认识它


ed105df51b554a3785c0993b249da412.png

c33ddccea22f4a9e94001483ff8c0dc1.png

28f6268f7d474958b47c84ac3631dfc0.png

e29654a1d4e6421592d88e02f160027d.png


上面三个是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);
    }


7c46380f9afb4052a972c4d383b91dca.png

 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的源码扩容机制

10e78165babf4085b71ef063657a5ca9.png

3cbcde00daf54b95ad104cf16830fd1c.png

大致看看源码,知道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!!!

相关文章
|
1月前
|
存储 Java
ArrayList
ArrayList是线程不安全的,底层使用 Object[]存储数据,可以存储任何类型的对象,包括 null 值,相当于动态数组。与 Java 中的数组相比,它的容量能动态增长。 核心属性: private static final int DEFAULT_CAPACITY = 10;//默认容量 transient Object[] 存储元素的集合 private int size; 元素个数 构造方法: public ArrayList() ; public ArrayList(int initialCapacity) ; public ArrayList(Collection<?
|
2月前
|
安全 Java API
ArrayList 全面详解
关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。本文详细解析了Java集合框架中的ArrayList,包括其定义、特点、成员变量、构造函数、API、主要方法和扩容机制等。欢迎留言交流。
|
4月前
|
存储
ArrayList的使用
ArrayList的使用
26 3
|
安全 Java
你对ArrayList了解多少?
你对ArrayList了解多少?
46 0
|
存储 安全 Java
ArrayList引发的一系列问题
ArrayList引发的一系列问题
105 0
ArrayList引发的一系列问题
|
Java 测试技术 索引
深入理解ArrayList(三)
深入理解ArrayList(三)
74 0
|
存储 设计模式 算法
ArrayList和LinkedList
介绍ArrayList和LinkedList
详解ArrayList
1.数据结构 底层使用Object类型的数组实现,线程不安全,添加元素时如果内存已满则会开辟新空间,将原数组copy过去。
99 0
|
Java 开发者
深入理解ArrayList(二)
深入理解ArrayList(二)
84 0
深入理解ArrayList(一)
深入理解ArrayList(一)
75 0