浅谈集合框架四——集合扩展:集合循环输出方式及list输出方式的效率对比
最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出。初学者对于本篇博客只建议作为参考,欢迎留言共同学习。
之前有介绍集合框架的体系概念(http://www.cnblogs.com/yjboke/p/8761195.html),本篇介绍一下集合扩展内容:集合循环输出方式及list输出方式的效率对比
遍历循环输出方式。
遍历输出方式我这边介绍四种,for循环、迭代器(Iterator)、增强for循环(foreach)和List集合特有的列表迭代器(ListIterator)。
增强for循环在for循环的基础上简化了代码,普通for循环可以没有遍历的目标,而增强for循环一定要有遍历的目标。在增强for循环中不可以进行增删改等操作,如需增删改等操作请使用普通for循环。
列表迭代器(ListIterator)是Iterator 的子接口,弥补了其无法新增、修改的缺点。
List<String> list = new ArrayList<String>();
list.add("abc1");
list.add("abc2");
list.add("abc3");
list.add("abc4"); //普通for循环输出
for(int i = 0; i<list.size(); i++){
System.out.println(list.get(i));
} //增强for循环输出
for(String s : list){
System.out.println(s);
}
//列表迭代器
ListIterator<String> li = list.listIterator();
while(li.hasNext()){
Object object = li.next();
if (object.equals("abc3")) {
li.add("asd");
}
}
System.out.println(list);
//迭代器输出
for(Iterator<String> it = list.iterator(); it.hasNext();){
System.out.println(it.next());
}
Map集合没有实现Iterable接口,所以map集合不能直接使用增强for循环,如果需要使用增强for循环需要借助于Set集合的keySet或entrySet集合。
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1001, "zhangsan");
map.put(1002, "wangwu");
map.put(1003, "lisi");
map.put(1004, "maliu");
//keySet方法
Set<Integer> keySet = map.keySet();
for(Integer i : keySet){
System.out.println("key:"+i+"; value:"+map.get(i));
}
//entrySet方法
Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
for(Map.Entry<Integer, String> i : entrySet){
System.out.println("key:" + i.getKey() + "----value:"+i.getValue());
}
——————————————————————————————————————————————————————————————————————
接下来将上面的代码加一些改动,定义一个长度为20000000的集合,用上方四种方法遍历输出并记录他们所消耗的时间,比较输出的效率。
public static void main(String[] args) {
list();
}
public static void list() {
List<String> list = new ArrayList<String>();
//定义一个集合的长度
int num = 20000000;
long timeStart,timeEnd;
for (int i = 0; i < num; i++) {
list.add("abd"+i);
}
//测试foreach循环所用的时间
timeStart = System.currentTimeMillis();
for(String s : list) {
}
timeEnd = System.currentTimeMillis();
System.out.println("foreach循环时间为:" + (timeEnd-timeStart) + "ms");
//测试Iterator循环所用的时间
timeStart = System.currentTimeMillis();
Iterator<String> it = list.iterator();
while(it.hasNext()) {
it.next();
}
timeEnd = System.currentTimeMillis();
System.out.println("Iterator循环时间为:" + (timeEnd-timeStart) + "ms");
//测试Iterator循环所用的时间
timeStart = System.currentTimeMillis();
ListIterator<String> lit = list.listIterator();
while(lit.hasNext()) {
lit.next();
}
timeEnd = System.currentTimeMillis();
System.out.println("ListIterator循环时间为:" + (timeEnd-timeStart) + "ms");
//测试for循环所用的时间
timeStart = System.currentTimeMillis();
for(int i = 0; i<list.size(); i++) {
list.get(i);
}
timeEnd = System.currentTimeMillis();
System.out.println(" for循环时间为:" + (timeEnd-timeStart) + "ms");
}
输出结果为:
foreach循环时间为:143ms Iterator循环时间为:12ms ListIterator循环时间为:13ms for循环时间为:18ms
然后将四种循环方式单独输出,输出结果为:
foreach循环时间为:103ms
Iterator循环时间为:9ms
ListIterator循环时间为:10ms
for循环时间为:17ms
可以看出Iterator和ListIterator相差不多,for循环又稍慢,foreach最慢。(如测试代码有不严谨之处,还请指出,共同学习。其他朋友测试可将集合长度调低测试。)
浅谈集合框架四——集合扩展:集合循环输出方式及list输出方式的效率对比的更多相关文章
- 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合
不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...
- 手撸ORM浅谈ORM框架之Add篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Query篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 浅谈Kotlin(四):控制流
浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 本篇介绍Kotlin ...
- 手撸ORM浅谈ORM框架之基础篇
好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...
- 手撸ORM浅谈ORM框架之Update篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- 手撸ORM浅谈ORM框架之Delete篇
快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...
- Java集合框架(四)
Collections 集合框架的工具类 着重讲解以下方法: 1.sort(): 1º根据元素的自然顺序对指定列表按升序进行排序,列表中的所有元素都必须实现comparable接口. pu ...
- java 集合框架(四)Set
一.概述 Set是一种没有重复元素的集合,它所有的方法都是直接继承自Collection接口,并且添加了一个对重复元素的限制.Set要求强化了equals和hashCode两个方法,以使Set集合可以 ...
随机推荐
- day38 12-Spring的Bean的属性的注入:名称空间p
xmlns="http://www.springframework.org/schema/beans"是默认的名称空间. xmlns:xsi="http://www.w3 ...
- windows10 中微信(UWP)版本不显示通知消息
前言: 前段时间笔者更换了升级了WINDOWS10系统,从应用商店安装微信后,使用期间不会推送消息通知,右下角的通知栏也无法添加微信图标.搜索百度和Google后,发现很多人都是这样,这是微信(UWP ...
- Sublime Text 2 快捷键用法大全
Ctrl+D 选词 (反复按快捷键,即可继续向下同时选中下一个相同的文本进行同时编辑) Ctrl+G 跳转到相应的行 Ctrl+J 合并行(已选择需要合并的多行时) Ctrl+L 选择整行(按住-继续 ...
- Spring_Bean的生命周期
init-method="init" destroy-method="destory" 指定初始化和销毁方法 创建Bean后置处理器 <!-- 实现Bea ...
- php-imagick扩展
介绍 magick 是用 ImageMagic API 来创建和修改图像的PHP官方扩展.ImageMagick® 是用来创建,编辑,合并位图图像的一套组件. 它能够用于读取,转换,写入多种不同格式的 ...
- 24种编程语言的Hello World程序
24种编程语言的Hello World程序 这篇文章主要介绍了 24 种编程语言的 Hello World 程序,包括熟知的 Java.C 语言.C++.C#.Ruby.Python.PHP 等编程语 ...
- 【JZOJ4811】【NOIP2016提高A组五校联考1】排队
题目描述 输入 输出 样例输入 5 4 1 2 1 3 3 4 3 5 1 4 2 4 1 2 2 5 样例输出 3 1 1 2 数据范围 样例解释 解法 可推知原树可以转换为一个序列,即优先序列: ...
- More Effective C++: 05技术(30-31)
30:Proxy classes 代理类 在C++中使用变量作为数组大小是违法的,也不允许在堆上分配多维数组: int data[dim1][dim2]; int *data = new int[di ...
- 开启远程XUL
参考:https://developer.mozilla.org/zh-cn/Remote_XUL firefox自4.0起(2011年4月版本,目前最新版为13.0),开始禁用远程XUL,这阻碍了初 ...
- 前端规范2-CSS规范
CSS规范 缩进 使用Tab缩进(相当于四个空格) 选择器与{之间必须包含空格,参1 属性名和之后的:不允许包含空格,:与属性值之间必须包含空格. 例 列表性属性值在单行时,后必须跟一个空格 ...