java中List接口实现类之:ArrayList

继承结构:

  1、List接口下的所有实现类都是:有序 可重复的

  2、ArrayList底层是采用数组,所以用于数组的特性:下标查找快、头尾增加元素快、中间增删改元素慢

  3、LinkedList底层采用双向链表存储,所以具有双向链表的特性:中间增删元素快,查询慢

  4、Vector底层和ArrayList相同,都是数组。但是Vector相对ArrayList与LinkedList是线程安全的,所以带来的是效率不如后两者

  所以:

    ArrayList适合查询

    LinkedList适合增删

    Vector适合要求线程安全

 

1、ArrayList可以看成一个动态的数组,即可以改变长度的数组;

  优点:

    *长度可以动态增长

    *ArrayList可以不制定元素的基本类型,所以ArrayList不同于数组,其可以存放不同数据类型

 

  缺点:

    *也是因为可以改变长度,所以比普通的数组效率要低

    *线程不是安全的,所以尽量使用在单线程中,如果是多线程进行使用Vector

 

2、初始化ArrayList

  --可以制定/不指定初始大小,可以指定/不指定元素类型

//1、不指定元素数组类型
  
    //不初始化容量
        ArrayList arr = new ArrayList();

    //初始化容量
        ArrayList arr1 = new ArrayList(10);

//2、制定元素类型
//初始化ArrayList且制定元素类型 ArrayList<String> arrlist = new ArrayList<String>();
arrlist.add(
"a"); //如果指定了元素类型,必须添加该数据类型的元素

 

3、ArrayList的常用方法

 

  *add()添加元素

//1、add()添加元素
        
        //直接追加(尾部)元素add()
        arr.add(1);
        arr.add(2);
        arr.add(3);

        //在制定index位置添加元素
        arr.add(1,"abc");  //在原arr下标index=1处添加元素"abc"
    
    System.out.println(arr);

//结果:
[1, abc, 2, 3]

 

  *remove()删除元素

//2、remove()删除元素
       
        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(1)

        arr.add(1,"abc");  //在原arr下标index=1处添加元素"abc" 

        //直接删除xx元素
        arr.remove("abc");
        
        //删除下标=2的元素
        arr.remove(2);

  如何删除元素为1的ArrayList??不能使用remove(1) 因为这是删除下标=1的元素

    arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(1);

        arr.add(1,"abc");  //在原arr下标index=1处添加元素"abc"; [1,abc,2,3,1]

        //方式1
        arr.remove(Integer.valueOf(1)); //只能删除第一个值为1的元素

//结果:
[abc, 2, 3, 1]
////////////////////////////////方式2/////////
    

    arr.add(1);
    arr.add(2);
    arr.add(3);
    arr.add(1);

    arr.add(1,"abc");  //在原arr下标index=1处添加元素"abc"

    //方式2:全部删除
    arr.removeAll(Arrays.asList(1));  //[abc, 2, 3]

 

  *获取元素的个数size()

        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(1);

        arr.add(1,"abc");  //在原arr下标index=1处添加元素"abc"
    
        //获取元素的个数
        System.out.println(arr.size()); //5

 

  *设置元素/修改已存在元素set()

        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(1);

        //set()
        arr.set(1,200);  //设置下标1处=200

        System.out.println(arr);  //[1, 200, 3, 1]
        
        //注意:不能设置不存在的下标
        arr.set(4,10); //下标最大=3  ❌

 

  *查找元素get()  

  -- get(int  index)

        ArrayList arr = new ArrayList();


        arr.add("a");
        arr.add("b");
        arr.add(3);
        arr.add(1);

        //get(int index)
        System.out.println(arr.get(1));  //b

 

 

  *清空元素clear()

        arr.add(1);
        arr.add(2);
        arr.add(3);
        arr.add(1);

       //clear
        arr.clear();
        
        System.out.println(arr);  //[]
        

 

4、ArrayList与普通数组之间相互转换

ArrayList与python中的list数组比较相似(包括形式都是[a,b,c]  ),而java中的数组{a ,b,c}更是一种基本数据结构。

 

posted on 2021-04-18 21:23  jesse_zhao  阅读(137)  评论(0编辑  收藏  举报

导航