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 是一个接口 ...
随机推荐
- Dubbo(五) Dubbo入门demo——helloworld
前言 前面我已经介绍了dubbo的一些基本工具和知识,让大家简单的了解了下RPC框架和Dubbo.接下来就是重点了,Dubbo的helloworld项目. 一.搭建项目 首先我们新建三个maven项目 ...
- LindDotNetCore~Mock对实际应用中的意义
回到目录 Mock在单元测试里的意义 Mock测试就是在测试过程中,对于某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以 便测试的测试方法.一个闹钟根据时间来进行提醒服务,如果过了下午5点 ...
- iOS libyuv
libyuv是Google开源库,可用作图像数据格式的转换,比如视频流编解码时格式的转换,YUV数据转化RGB等 libyuv静态库 为了方便使用,已经将libyuv源代码打包成了iOS静态库,lib ...
- python并发编程之多进程
一同步与异步 同步执行:一个进程在执行任务时,另一个进程必须等待执行完毕,才能继续执行 异步执行:一个进程在执行任务时,另一个进程无需等待其执行完毕就可以执行,当有消息返回时,系统会提醒后者进行处理, ...
- 【网络流】POJ1273 Drainage Ditches
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 78671 Accepted: 3068 ...
- Python笔记(一):安装+爬虫环境配置+打包为EXE文件
1. 安装 https://www.python.org/downloads/windows/ 到官网下载安装程序 Windows x86 32位操作系统 Windows x8 ...
- 手淘的flexible.js解决手机适配问题
如何使用flexible.js做手机适配 做移动端网页肯定需要做适配,以前都用的fixscreen.js,对比一下,觉得flexible.js更好吧,毕竟是大厂出的东西. 第一步要给页面加在viewp ...
- deeplearning.ai 神经网络和深度学习 week4 深层神经网络 听课笔记
1. 计算深度神经网络的时候,尽量向量化数据,不要用for循环.唯一用for循环的地方是依次在每一层做计算. 2. 最常用的检查代码是否有错的方法是检查算法中矩阵的维度. 正向传播: 对于单个样本,第 ...
- JavaScript判断对象是否含有某个属性
两种方式,但稍有区别 1,in 运算符 1 2 3 var obj = {name:'jack'}; alert('name' in obj); // --> true alert('toStr ...
- isupper()函数
isupper()函数可以用来判断字符c是否为大写英文字母! 原型:extern int isupper(int c); 头文件:ctype.h 功能:判断字符c是否为大写英文字母 说明:当参数c为大 ...