zoukankan      html  css  js  c++  java
  • subList ArrayList LinkedList

    List<E> subList(int fromIndex,int toIndex)


    该方法返回原有集合从fromIndex 到 toIndex之间一部分数据,组成一个新的集合,这两个集合之间是有联系的。

     1:你对原来的集合与返回的集合做非结构性的修改,都会影响到对方。

     2:如果你对原来的集合进行结构性的修改,在使用返回的子List语义上将会是undefined, 使用的时候将会抛出        ConcurrentModificationException异常

          List<String> parentList = new ArrayList<>();
    
            System.out.println("-----------以下输出subList------------");
            for(int i=0;i<5;i++){
                parentList.add(String.valueOf(i));
            }
    
            List<String> subList = parentList.subList(1,3);
            for(String s:subList){
                System.out.println(s);
            }    //out: 1,2
    
    
            System.out.println("-----------以下修改subList中元素 后输出parentList------------");
            subList.set(0,"new_1");
    
            for(String s:parentList){
                System.out.println(s);  //out: 0 new_1 2 3 4
            }
    
            System.out.println("-----------以下在subList中增加元素 后输出parentList------------");
            subList.add("2.5");
            for(String s:parentList){
                System.out.println(s);  //out: 0 new_1 2 2.5 3 4
            }
            System.out.println("-----------以下在prentList中修改元素 后输出subList-----------");
            parentList.set(2,"new_2");
            for(String s:subList){
                System.out.println(s);  //out: new_1 new_2 2.5
            }
    
            System.out.println("-----------以下在prentList中增加元素 后输出subList-----------");
             parentList.add("parentListAdd");
            for(String s:subList){
                System.out.println(s);   //Exception in thread "main" java.util.ConcurrentModificationException
            }

     ArrayList和LinkedList


    插入:ArrayList是基于数组实现的,数组是一块连续的内存空间,因此总是在末尾增加元素,只有在空间不足的时候才产生数组的扩容和复制。如果在数组的任意位置插入元素,就会导致在该位置后的所有元素重新排序,因此效率极差。linkedList是基于链表的数据结构,不会因为插入数据而导致性能下降。

     

    删除:arrayList每次删除元素后都会进行数据的重组,删除的数据位置越靠前,开销越大。

     System.out.println("----------------------用ArrayList预置5千万对象-----------");
            long start = System.currentTimeMillis();
            Object object = new Object();
            List list = new ArrayList();
            for(int i=0;i<50000000;i++){
                list.add(object);
            }
            long end = System.currentTimeMillis();
            System.out.println(end-start);   //850
    
    
            System.out.println("----------------------用LinkedList预置5千万对象-----------");
            start = System.currentTimeMillis();
            Object object1 = new Object();
            List list1 = new LinkedList();
            for(int i=0;i<50000000;i++){
                list.add(object);
            }
            end = System.currentTimeMillis();
            System.out.println(end-start); //750
    
            System.out.println("----------------------ArrayList增加元素-----------");
            start = System.currentTimeMillis();
            Object object2 = new Object();
    //        for(int i=0;i<1000;i++){
    //            list.add(0,object); //76562
    //        }
            end = System.currentTimeMillis();
            System.out.println(end-start);
            System.out.println("----------------------LinkedList增加元素-----------");
            start = System.currentTimeMillis();
            Object object3 = new Object();
            for(int i=0;i<1000;i++){
                list1.add(object);
            }
            end = System.currentTimeMillis();
            System.out.println(end-start); //0
    
            System.out.println("----------------------ArrayList删除元素-----------");
            start = System.currentTimeMillis();
    
            list.remove(500);
    
            end = System.currentTimeMillis();
            System.out.println(end-start);  //130
    
            System.out.println("----------------------LinkedList删除元素-----------");
            start = System.currentTimeMillis();
    
            list1.remove(500);
    
            end = System.currentTimeMillis();
            System.out.println(end-start);  //0

    上面的实验可以说明,如果数据稳定,我们可以使用ArrayList,如果容易发生修改,我们可以考虑使用LinkedList。还用注意:在linkedList中不要使用get(),即使元素只有几个。因为在链表中,随机访问 get(i) 的时候,链表只能从前往后数,第i个才能返回,随着 i 越大,时间会越来越长。

  • 相关阅读:
    TCP/IP——何时用UDP代替TCP
    网络编程——客户/服务器程序设计范式
    各种常见英特网应用协议的使用情况和传输层三大协议的异同
    linux dd使用记录
    杂谈-为什么我们不要去外包公司
    小雪的成都
    哪个的情感
    mac上的git completion
    ue4 UE4Editor.lib找不到
    ue4 重新生成ide project文件的命令行
  • 原文地址:https://www.cnblogs.com/dsitn/p/7047952.html
Copyright © 2011-2022 走看看