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. 在单链表和双链表中删除倒数第k个结点

    题目: 分别实现两个函数,一个可以删除单链表中倒数第K个节点,另一个可以删除双链表中倒数第K个节点. 要求: 如果链表长度为N,时间复杂度达到O(N),额外空间复杂度达到O(1). 解答: 让链表从头 ...

  2. H5开发中的故障

    本篇博文会不断的收录我在做H5页面时遇到的问题以及解决方案,当然有的问题,我也没有遇到好的解决方案,所以如果你有解决的办法,请务必不吝赐教! H5开发中的故障       微信APP返回按钮不刷新页面 ...

  3. PHP SPL迭代模式

    mode 有模式的两个正交组可以设置: 1.迭代的方向 SplDoublyLinkedList::IT_MODE_LIFO(堆叠型) SplDoublyLinkedList::IT_MODE_FIFO ...

  4. 使用xUnit为.net core程序进行单元测试(中)

    第一部分: http://www.cnblogs.com/cgzl/p/8283610.html 下面有一点点内容是重叠的.... String Assert 测试string是否相等: [Fact] ...

  5. Virtual Box配置CentOS7网络

    1.先管理中配置两个网络 最好的办法就是使用两块网卡,nat(虚拟机访问互联网,使用10.0.2.x段)和host-only(虚拟机和主机互相通信,使用192.168.56.x段) 2.接下来对Cen ...

  6. JavaScript基础知识(JSON、Function对象、原型、引用类型)

    19.JSON 概念:JavaScript 对象表示法(JavaScript Object Notation),是一种轻量级的数据交换格式  特点:易于程序员编写和查看:易于计算机解析和生成 数据结构 ...

  7. AOP---jdk动态代理的思考

    引出问题:动态代理中是谁调用了invoke方法 为了更好的说明情况,我先写一个动态代理类 a.Person类 public interface Person { public void eating( ...

  8. deeplearning.ai 人工智能行业大师访谈 Ruslan Salakhutdinov 听课笔记

    Ruslan Salakhutdinov一方面是苹果的研究主管,另一方面是CMU的教授. 1. Ruslan说自己进入深度学习完全是运气,他在多伦多大学读硕士,然后休学了一年,他在金融领域工作,那时候 ...

  9. deeplearning.ai 人工智能行业大师访谈 林元庆 听课笔记

    1. 读博士之前,林元庆是学光学,他自认为数学基础非常好.在宾夕法尼亚大学上课认识了他的博士导师Dan Lee,转学机器学习.他从头开始学了很多算法,甚至PCA,之前他完全不知道这些,他觉得非常兴奋, ...

  10. Vjios P1736 铺地毯【暴力,思维】

    铺地毯 描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有n张地毯,编号从1到n.现在将这些地毯按照编号从小到大的顺序平行于坐标轴 ...