Java List接口实现类(ArrayList、LinkedList、Vector)简述

Collection子接口一:List

  • 通常用List替代数组

  • List集合类中的元素都是有序、可重复的,集合中的每个元素都有其对应的顺序索引

  • JDK API中List接口实现类常用的有:ArrayList、LinkedList、Vector

  • ArrayList、LinkedList、Vector的异同点

    • 同:三个类都实现了List接口,存储数据的特点相同:存储有序的、可重复的数据
    • 异:ArrayList:为List的主要实现类,线程不安全,效率高:底层使用Object[] elementData存储;LinkedList:对于频繁的插入、删除操作,使用此类的效率比ArrayList效率高:底层使用双向链表存储;Vector:线程安全,效率低,底层使用Object[] elementData存储
  • ArrayList的源码分析:

    • jdk 7的情况下:

      1.ArrayList list=new ArrayList();//底层创建了长度是10的Object[]数组elementData

      2.list.add(123);//elementData[0]=new Integer(123)

      list.add(11);//如果此次的添加使原来的elementDate数组容量不够,则扩容;默认情况下,扩容为原来的1.5倍,同时将原有数组中的元素复制到新的数组中

      3.建议在开始时使用带参的构造器:ArrayList list=new ArrayList(int capacity)

    • jdk 8的情况下:

      1.ArrayList list=new ArrayList();//底层Object[] elementData初始化为{},没有创建长度是10的Object[]数组elementData

      2.list.add(123);//第一次调用add()时,底层才创建了长度是10的数组,并将数据123添加到elementData

    • 总结:jdk 8相比jdk 7,延迟了数组的创建,节省了内存

  • LinkedList的源码分析

    • LinkedList list=new LinkedList();//内部声明了Node类型的first和last属性,默认值为null
    • list.add(123);//将123封装到Node中,创建了Node对象
    • Node定义为:体现了LinkedList的双向链表的说法
  • Vector的源码分析:jdk 7和jdk 8中通过Vector()构造器创建对象时,底层都创建了长度为10的数组,扩容时,默认扩容为原来的2倍

  • List接口方法:List处理从Collection集合继承的方法外,List集合里添加了一些根据索引来操作集合元素的方法,如下所示:

    • void add(int index, object ele):在index位置插入ele元素
    package www.bh.c.listtest;
    import java.util.ArrayList;
    import java.util.Date;
    
    public class ListTest1 {
        public static void main(String[] args) {
            ArrayList arrayList = new ArrayList();
            arrayList.add("AA");
            arrayList.add("CC");
            arrayList.add("Java");
            arrayList.add(123);
            arrayList.add(new Date());
            System.out.println(arrayList);//[AA, CC, Java, 123, Thu Nov 19 16:36:54 CST 2020]
            //void add(int index, object ele):在index位置插入ele元素
            arrayList.add(1,"BB");
            System.out.println(arrayList);//[AA, BB, CC, Java, 123, Thu Nov 19 16:36:54 CST 2020]
        }
    }
    
    • boolean addAll(int index, Collection eles):从index开始将eles中的所有元素添加进来
    package www.bh.c.listtest;
    import java.util.ArrayList;
    import java.util.Date;
    
    public class ListTest1 {
        public static void main(String[] args) {
            ArrayList arrayList = new ArrayList();
            arrayList.add("AA");
            arrayList.add("CC");
            arrayList.add("Java");
            arrayList.add(123);
            arrayList.add(new Date());
            System.out.println(arrayList);//[AA, CC, Java, 123, Thu Nov 19 16:36:54 CST 2020]
            ArrayList arrayList1 = new ArrayList();
            arrayList1.add(456);
            arrayList1.add(7);
            //boolean addAll(int index, Collection eles):从index开始将eles中的所有元素添加进来
            arrayList.addAll(0,arrayList1);
            System.out.println(arrayList);//[456, 7, AA, CC, Java, 123, Thu Nov 19 16:39:58 CST 2020]
        }
    }
    
    • Object get(int index):获取指定index位置的元素
    package www.bh.c.listtest;
    import java.util.ArrayList;
    import java.util.Date;
    
    public class ListTest1 {
        public static void main(String[] args) {
            ArrayList arrayList = new ArrayList();
            arrayList.add("AA");
            arrayList.add("CC");
            arrayList.add("Java");
            arrayList.add(123);
            arrayList.add(new Date());
            System.out.println(arrayList);//[AA, CC, Java, 123, Thu Nov 19 16:36:54 CST 2020]
            //Object get(int index):获取指定index位置的元素
            System.out.println(arrayList.get(0));//AA
        }
    }
    
    • int indexOf(Object obj):返回obj在集合中首次出现的位置
    package www.bh.c.listtest;
    import java.util.ArrayList;
    import java.util.Date;
    
    public class ListTest1 {
        public static void main(String[] args) {
            ArrayList arrayList = new ArrayList();
            arrayList.add("AA");
            arrayList.add("CC");
            arrayList.add("Java");
            arrayList.add(123);
            arrayList.add(new Date());
            System.out.println(arrayList);//[AA, CC, Java, 123, Thu Nov 19 16:36:54 CST 2020]
            //int indexOf(Object obj):返回obj在集合中首次出现的位置,如果不存在,则返回-1
            System.out.println(arrayList.indexOf("CC"));//1
        }
    }
    
    
    • int lastIndexOf(Object obj):返回obj在集合中最后出现的位置
    package www.bh.c.listtest;
    import java.util.ArrayList;
    import java.util.Date;
    
    public class ListTest1 {
        public static void main(String[] args) {
            ArrayList arrayList = new ArrayList();
            arrayList.add("AA");
            arrayList.add("CC");
            arrayList.add("Java");
            arrayList.add(123);
            arrayList.add(new Date());
            arrayList.add("CC");
            System.out.println(arrayList);//[AA, CC, Java, 123, Thu Nov 19 16:36:54 CST 2020]
            //int lastIndexOf(Object obj):返回obj在集合中最后出现的位置
            System.out.println(arrayList.lastIndexOf("CC"));//5
        }
    }
    
    • Object remove(int index):移除指定index位置的元素,并返回此元素
    package www.bh.c.listtest;
    import java.util.ArrayList;
    import java.util.Date;
    
    public class ListTest1 {
        public static void main(String[] args) {
            ArrayList arrayList = new ArrayList();
            arrayList.add("AA");
            arrayList.add("CC");
            arrayList.add("Java");
            arrayList.add(123);
            arrayList.add(new Date());
            arrayList.add("CC");
            System.out.println(arrayList);//[AA, CC, Java, 123, Thu Nov 19 16:36:54 CST 2020]
            //Object remove(int index):移除指定index位置的元素,并返回此元素
            System.out.println(arrayList.remove(5));//CC
        }
    }
    
    • Object set(int index,Object ele):设置指定index位置的元素为ele
    package www.bh.c.listtest;
    import java.util.ArrayList;
    import java.util.Date;
    
    public class ListTest1 {
        public static void main(String[] args) {
            ArrayList arrayList = new ArrayList();
            arrayList.add("AA");
            arrayList.add("CC");
            arrayList.add("Java");
            arrayList.add(123);
            arrayList.add(new Date());
            arrayList.add("CC");
            System.out.println(arrayList);//[AA, CC, Java, 123, Thu Nov 19 16:36:54 CST 2020]
            //Object set(int index,Object ele):设置指定index位置的元素为ele
            arrayList.set(1,"BB");
            System.out.println(arrayList);//[AA, BB, Java, 123, Thu Nov 19 16:50:40 CST 2020, CC]
        }
    }
    
    • List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置左闭右开的子集合
    package www.bh.c.listtest;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    public class ListTest1 {
        public static void main(String[] args) {
            ArrayList arrayList = new ArrayList();
            arrayList.add("AA");
            arrayList.add("CC");
            arrayList.add("Java");
            arrayList.add(123);
            arrayList.add(new Date());
            arrayList.add("CC");
            System.out.println(arrayList);//[AA, CC, Java, 123, Thu Nov 19 16:36:54 CST 2020]
            //List subList(int fromIndex,int toIndex):返回从fromIndex到toIndex位置左闭右开的子集合
            List list = arrayList.subList(1, 3);
            System.out.println(list);//[CC, Java]
            System.out.println(arrayList);//[AA, BB, Java, 123, Thu Nov 19 16:50:40 CST 2020, CC]
        }
    }
    
    • List常用方法总结:

      • 增:add(Object obj)

      • 删:remove(int index) / remove(Object obj)

      • 改:set(int index,Object obj)

      • 查:get(int index)

      • 插:add(int index,Object obj)

      • 长度:size()

      • 遍历:1.Iterator迭代器方式

        ​ 2.增强for循环

        ​ 3.普通循环

    • 面试题:

    package www.bh.c.listtest;
    import java.util.ArrayList;
    import java.util.List;
    
    public class ListTest1 {
        public static void main(String[] args) {
            ArrayList arrayList = new ArrayList();
            arrayList.add(1);
            arrayList.add(2);
            arrayList.add(123);
            System.out.println(arrayList);//[1, 2, 123]
            //调用removeTest()
            removeTest(arrayList);
            System.out.println(arrayList);//[1, 2],删除了索引值所在的元素
        }
        public static void removeTest(List list){
            list.remove(2);
        }
    }
    
    package www.bh.c.listtest;
    import java.util.ArrayList;
    import java.util.List;
    
    public class ListTest1 {
        public static void main(String[] args) {
            ArrayList arrayList = new ArrayList();
            arrayList.add(1);
            arrayList.add(2);
            arrayList.add(123);
            System.out.println(arrayList);[1, 2, 123]
            调用removeTest()
            removeTest(arrayList);
            System.out.println(arrayList);//[1, 123],删除了时间的元素
        }
        public static void removeTest(List list){
           list.remove(new Integer(2));
        }
    }
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值