JAVA 集合框架 Collection的子接口List (三)

JAVA 集合框架 Collection的子接口List (三),第1张

JAVA 集合框架 Collection的子接口List (三) 1、知识点

Collection 接口:单列集合,用来存储一个一个的对象=====List 接口:存储有序可重复的数据========ArrayList:List 接口的主要实现类,效率高但线程不安全,底层使用Object[] elementData存储(底层数组)========linkedList:(底层使用双向链表)。对于频繁的删除、插入 *** 作使用他效率更高========Vector:List 接口的古老实现类,效率低但线程安全,底层使用Object[] 存储*(即便涉及到线程安全问题也几乎用不到,)
三者异同
同:存取有序重复的数据
不同: 2、ArrayList 源码分析

jdk 7
ArrayList arrayList1 = new ArrayList();
//底层创建了长度是10 的Object[] 数组的elementData
arrayList1.add(123);如果此次添加导致底层数容量不够,则扩容
默认情况下扩容为原来的1.5倍,同时需要将原来数组中的数据复制到新数组中
结论:建议开发是使用:ArrayList arrayList2 = new ArrayList(40);

jdk 8
ArrayList arrayList1 = new ArrayList();
//底层初始化为Object[] EMPTY_ELEMENTDATA = {};并没有创建数组(申请内存)
arrayList1.add(123); //第一次调用add()时,底层才创建长度为10的数组,并将数据添加到数组中。
后续和JDK 7 一样

结论:jdk 8 类似于单例模式的懒汉式。

3、linkedList 源码分析

底层是一个双向链表。

4、List 接口中常用方法
 @Test
    //List的测试学习
    public void test2(){

        ArrayList arrayList1 = new ArrayList();
        ArrayList arrayList2 = new ArrayList(40);

        arrayList2.add(158);
        arrayList2.add(897);
        linkedList linkedList = new linkedList();
        //底层创建了长度是10 的Object[] 数组的elementData
        arrayList1.add(123);
        arrayList1.add("werq");
        arrayList1.add(new Person());
        arrayList1.add(new Person("Tom","程序员",23));

        System.out.println("arrayList1长度为:"+arrayList1.size());

        arrayList1.addAll(arrayList2);
        System.out.println("arrayList1长度为:"+arrayList1.size());
        Iterator iterator = arrayList1.iterator();

        System.out.println("遍历结果为:");
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }
 @Test
    //List的测试学习
    public void test2(){

        ArrayList arrayList1 = new ArrayList();
        ArrayList arrayList2 = new ArrayList(40);

        arrayList2.add(158);
        arrayList2.add(897);
        linkedList linkedList = new linkedList();
        //底层创建了长度是10 的Object[] 数组的elementData
        arrayList1.add(123);
        arrayList1.add("werq");
        arrayList1.add(new Person());
        arrayList1.add(new Person("Tom","程序员",23));

        System.out.println("arrayList1长度为:"+arrayList1.size());

        arrayList1.addAll(arrayList2);
        System.out.println("arrayList1长度为:"+arrayList1.size());
        Iterator iterator = arrayList1.iterator();

        System.out.println("遍历结果为:");
        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
        System.out.println("**********************");
        System.out.println(arrayList1.subList(1,5)); 
        System.out.println( arrayList1.isEmpty() );

        //int indesOf(Object obj):返回在集合中首次出现的位置
        //lastIndexOf(Object obj):返回在集合中首次出现的位置
        //Object remove(int index):移除指定index位置的元素,并返回次元素
        //Object set(int index,Object ele):设置指定位置的元素为ele
        //

    }

欢迎分享,转载请注明来源:内存溢出

原文地址: https://www.outofmemory.cn/zaji/5716315.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存