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); // 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); // 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); // System.out.println("----------------------ArrayList删除元素-----------");
start = System.currentTimeMillis(); list.remove(500); end = System.currentTimeMillis();
System.out.println(end-start); // System.out.println("----------------------LinkedList删除元素-----------");
start = System.currentTimeMillis(); list1.remove(500); end = System.currentTimeMillis();
System.out.println(end-start); //

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

subList ArrayList LinkedList的更多相关文章

  1. ArrayList LinkedList Vector

    ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList, Lin ...

  2. ArrayList, LinkedList, Vector - dudu:史上最详解

    ArrayList, LinkedList, Vector - dudu:史上最详解 我们来比较一下ArrayList, LinkedLIst和Vector它们之间的区别.BZ的JDK版本是1.7.0 ...

  3. ArrayList,LinkedList的对比

    ArrayList,LinkedList都是Collection接口的通用实现方式,两者采用了不用的存储策略,用来适应不同场合的需要. 实现方式 ArrayList的内部采用集合的方式存储数据 唯一需 ...

  4. Hashtable,HashMap,TreeMap有什么区别?Vector,ArrayList,LinkedList有什么区别?int和Integer有什么区别?

    接着上篇继续更新. /*请尊重作者劳动成果,转载请标明原文链接:*/ /*https://www.cnblogs.com/jpcflyer/p/10759447.html* / 题目一:Hashtab ...

  5. 09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHashSet,TreeSet

    09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHas ...

  6. Vector & ArrayList Hashtable & HashMap ArrayList & LinkedList

    1. Vector & ArrayList 1)  Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的 ...

  7. java面试题(杨晓峰)---第八讲谈谈Vector,ArrayList,LinkedList有何区别?

    Vector,ArrayList,LinkedList均为线性的数据结构,但是从现实方式与应用场景中又存在差别. 1 底层实现方式 ArrayList内部数组来实现,LinkedList内部采用双向链 ...

  8. Javase之集合体系(2)之List及其子类ArrayList,LinkedList与Vector及其迭代器知识

    集合体系之List及其子类ArrayList,LinkedList与Vector及其迭代器知识 List(接口) 特点:有序(存储与取出顺序相同),可重复 List子类特点: ​ ArrayList: ...

  9. Java集合--ArrayList,LinkedList性能分析

    转载请注明出处:http://www.cnblogs.com/skywang12345/p/3308900.html 第1部分 List概括 先回顾一下List的框架图 (01) List 是一个接口 ...

随机推荐

  1. 小白的Python之路 day5 random模块和string模块详解

    random模块详解 一.概述 首先我们看到这个单词是随机的意思,他在python中的主要用于一些随机数,或者需要写一些随机数的代码,下面我们就来整理他的一些用法 二.常用方法 1. random.r ...

  2. Hadoop 新生报道(四) WordCount

         WordCount是hadoop里hello word级的第一个程序,作为一个萌新,我也来跑一跑这个,附带针对新人的说明.      所谓WordCount,就是统计一个或几个文档中相同的单 ...

  3. 平衡树Treap模板与原理

    这次我们来讲一讲Treap(splay以后再更) 平衡树是一种排序二叉树(或二叉搜索树),所以排序二叉树可以迅速地判断两个值的大小,当然操作肯定不止那么多(不然我们还学什么). 而平衡树在排序二叉树的 ...

  4. 【动态规划】洛谷P1006传纸条

    题目描述: 小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题.一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了.幸运的 ...

  5. PE文件详解(七)

    本文转载自小甲鱼PE文件讲解系列原文传送门 这次主要说明导出表,导出表一般记录着文件中函数的地址等相关信息,供其他程序调用,常见的.exe文件中一般不存在导出表,导出表更多的是存在于dll文件中.一般 ...

  6. For循环将将数字集合分类写入字典

    有以下数字集合[11,22,33,44,55,66,77,88,99,25,35,45,66,88],将所有大于66的值保存至字典的第一个key中,将小于66的值保存至第二个key的值中.即{'k1' ...

  7. java 重定向和转发的区别

    注:原创链接  http://www.cnblogs.com/shenliang123/archive/2011/10/27/2226892.html response.sendredirect(&q ...

  8. 看JQ时代过来的前端,如何转换思路用Vue打造选项卡组件

    前言 在Vue还未流行的时候,我们都是用JQuery来封装一个选项卡插件,如今Vue当道,让我们一起来看看从JQ时代过来的前端是如何转换思路,用数据驱动DOM的思想打造一个Vue选项卡组件. 接下来, ...

  9. C#操作MongoDB的简单实例

    最近比较忙,很久没更新了(虽然没人看,也没人在乎,也要记得be yourself), 前面分享了一些mongodb的安装和简单的语法,今天模仿支付宝首页的模块移动功能,用mongo做一个简单的后台实例 ...

  10. hdu_2604Queuing(快速幂矩阵)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2604 Queuing Time Limit: 10000/5000 MS (Java/Others)  ...