• 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 越大,时间会越来越长。

  • 相关阅读:
    PAIRING WORKFLOW MANAGER 1.0 WITH SHAREPOINT 2013
    Education resources from Microsoft
    upgrade to sql server 2012
    ULSViewer sharepoint 2013 log viewer
    Top 10 Most Valuable Microsoft SharePoint 2010 Books
    讨论 Setsockopt选项
    使用 Alchemy 技术编译 C 语言程序为 Flex 可调用的 SWC
    Nagle's algorithm
    Nagle算法 TCP_NODELAY和TCP_CORK
    Design issues Sending small data segments over TCP with Winsock
  • 原文地址:https://www.cnblogs.com/dsitn/p/7047952.html
Copyright © 2020-2023  润新知