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); // 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的更多相关文章
- ArrayList LinkedList Vector
ArrayList是基于数组实现的,没有容量的限制. 在删除元素的时候,并不会减少数组的容量大小,可以调用ArrayList的trimeToSize()来缩小数组的容量. ArrayList, Lin ...
- ArrayList, LinkedList, Vector - dudu:史上最详解
ArrayList, LinkedList, Vector - dudu:史上最详解 我们来比较一下ArrayList, LinkedLIst和Vector它们之间的区别.BZ的JDK版本是1.7.0 ...
- ArrayList,LinkedList的对比
ArrayList,LinkedList都是Collection接口的通用实现方式,两者采用了不用的存储策略,用来适应不同场合的需要. 实现方式 ArrayList的内部采用集合的方式存储数据 唯一需 ...
- Hashtable,HashMap,TreeMap有什么区别?Vector,ArrayList,LinkedList有什么区别?int和Integer有什么区别?
接着上篇继续更新. /*请尊重作者劳动成果,转载请标明原文链接:*/ /*https://www.cnblogs.com/jpcflyer/p/10759447.html* / 题目一:Hashtab ...
- 09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHashSet,TreeSet
09 Collection,Iterator,List,listIterator,Vector,ArrayList,LinkedList,泛型,增强for,可变参数,HashSet,LinkedHas ...
- Vector & ArrayList Hashtable & HashMap ArrayList & LinkedList
1. Vector & ArrayList 1) Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的 ...
- java面试题(杨晓峰)---第八讲谈谈Vector,ArrayList,LinkedList有何区别?
Vector,ArrayList,LinkedList均为线性的数据结构,但是从现实方式与应用场景中又存在差别. 1 底层实现方式 ArrayList内部数组来实现,LinkedList内部采用双向链 ...
- Javase之集合体系(2)之List及其子类ArrayList,LinkedList与Vector及其迭代器知识
集合体系之List及其子类ArrayList,LinkedList与Vector及其迭代器知识 List(接口) 特点:有序(存储与取出顺序相同),可重复 List子类特点: ArrayList: ...
- Java集合--ArrayList,LinkedList性能分析
转载请注明出处:http://www.cnblogs.com/skywang12345/p/3308900.html 第1部分 List概括 先回顾一下List的框架图 (01) List 是一个接口 ...
随机推荐
- 浅谈MVC MVP MVVM
复杂的软件必须有清晰合理的架构,否则无法开发和维护. MVC(Model-View-Controller)是最常见的软件架构之一,业界有着广泛应用. 它本身很容易理解,但是要讲清楚,它与衍生的 MVP ...
- CS:APP3e 深入理解计算机系统_3e MallocLab实验
详细的题目要求和资源可以到 http://csapp.cs.cmu.edu/3e/labs.html 或者 http://www.cs.cmu.edu/~./213/schedule.html 获取. ...
- select超链接跳转A
客户端页面 实现 下拉菜单 跳转链接 如图 遂使用 select option来展现.开始想到添加 a标签,结果,不行.渲染不出来 搜索查询得知 如下方法实现 ================== & ...
- 如何删除chrome地址栏里面曾经输错的地址
在chrome浏览器的地址栏输入你想删除的网址的部分字幕,比如,在地址栏输入form,然后用键盘上的方向键定位到你想删除的那个错误的地址,如下图所示 然后在键盘上按 shift+del 组合键将其 ...
- jq交叉淡入淡出轮播图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Yii2.0源码阅读-一次请求的完整过程
Yii2.0框架源码阅读,从请求发起,到结束的运行步骤 其实最初阅读是从yii\web\UrlManager这个类开始看起,不断的寻找这个类中方法的调用者,最终回到了yii\web\Applicati ...
- Java多线程与并发编程学习
一.线程三大特性 多线程有三大特性,原子性.可见性.有序性 1.1 什么是原子性 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行.一个很经典的例子就是银行账户转账 ...
- GStreamer Windows tutorial demo 开发环境配置
GStreamer 示例程序在 Windows 环境配置时坑比较多,好不容易配置成功了,写篇文档分享一下安装的关键步骤 官方文档见:https://gstreamer.freedesktop.org/ ...
- 大数据Hadoop学习之搭建Hadoop平台(2.1)
关于大数据,一看就懂,一懂就懵. 一.简介 Hadoop的平台搭建,设置为三种搭建方式,第一种是"单节点安装",这种安装方式最为简单,但是并没有展示出Hadoop的技术优势,适合 ...
- deeplearning.ai 人工智能行业大师访谈 Yoshua Bengio 听课笔记
1. 如何走上人工智能的研究的?Bengio说他小时候读了很多科幻小说,1985年(64年出生,21岁)研究生阶段开始阅读神经网络方面的论文,对这个领域产生了热情. 2. 如何看深度学习这些年的发展? ...