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 是一个接口 ...
随机推荐
- 第十章:Python の 网络编程基础(二)
本課主題 Python中的作用域补充 socketserver 源码 线程的介绍和操作实战 进程的介绍和操作实战 协程的介绍和操作实战 本周作业 Python中的作用域补充 Python世界里沒有块级 ...
- 小白的Python之路 day5 shelve模块讲解
shelve模块讲解 一.概述 之前我们说不管是json也好,还是pickle也好,在python3中只能dump一次和load一次,有什么方法可以向dump多少次就dump多少次,并且load不会出 ...
- 【转自Testerhome】iOS 真机如何安装 WebDriverAgent
开始 尽量升级Xcode到最新版,保持iPhone的版本大于9.3 从github上下载代码 git clone https://github.com/facebook/WebDriverAgent ...
- ajax struts2 数据的返回形式
这篇随笔算是接上篇的数据请求返回,上一篇关于分页用的返回的数据形式是json,http://www.cnblogs.com/tele-share/p/7192206.html这次主要探讨ajax从st ...
- Unity3d 复制文字到剪切板及存储图像到相册
游戏中里开发分享功能时用到两个小功能:1.复制一个链接到剪切板供在其他应用粘贴分享使用,2.保存一张二维码图像到相册供发送给其他应用用于分享.但是在unity中无法完成,需要分别开发相应的插件. An ...
- c# winform 视频转字符动画
以上是大图展示, 原理比较简单,附件下载带了一个分辨率比较小的txt动画. 音乐删除了music.mp3, 如果需要自己下载一首歌曲,然后放在根目录名称“music.mp3”就可以了. 附件点我 ...
- 使用FormatMessage函数编写一个内核错误码查看器
在编写驱动程序的时候,常用的一个结构是NTSTATUS,它来表示操作是否成功,但是对于失败的情况它的返回码过多,不可能记住所有的情况,应用层有一个GetLastError函数,根据这个函数的返回值可以 ...
- 【转载】SSD 下的 MySQL IO 优化
一 目录 一 目录 二 背景 三 SSD 特性 四 基于 SSD 的数据库优化 五 A 项目 MySQL 主从关系图 六 程序切换之前调优 6.1 修改系统 IO 调度算法 6.2 修改 innodb ...
- sql servel 报错:将 expression 转换为数据类型 int 时出现算术溢出错误。
执行sql语句:SELECT AVG( DATEDIFF(s,s.CreatedDate,s.SendDate) ) AS submitTime FROM dbo.SmsSend AS s ...
- 存储库-MongoDB简单的操作
简介: MongoDB是一款强大.灵活.且易于扩展的通用型数据库 1.易用性 MongoDB是一个面向文档的数据库,而不是关系型的数据库: 不采用关系型主要是为了可扩展性 2.易扩展性 存储在Mong ...