最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出。初学者对于本篇博客只建议作为参考,欢迎留言共同学习。

  之前有介绍集合框架的体系概念(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输出方式的效率对比的更多相关文章

  1. 牛客网Java刷题知识点之Java 集合框架的构成、集合框架中的迭代器Iterator、集合框架中的集合接口Collection(List和Set)、集合框架中的Map集合

    不多说,直接上干货! 集合框架中包含了大量集合接口.这些接口的实现类和操作它们的算法. 集合容器因为内部的数据结构不同,有多种具体容器. 不断的向上抽取,就形成了集合框架. Map是一次添加一对元素. ...

  2. 手撸ORM浅谈ORM框架之Add篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  3. 手撸ORM浅谈ORM框架之Query篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  4. 浅谈Kotlin(四):控制流

    浅谈Kotlin(一):简介及Android Studio中配置 浅谈Kotlin(二):基本类型.基本语法.代码风格 浅谈Kotlin(三):类 浅谈Kotlin(四):控制流 本篇介绍Kotlin ...

  5. 手撸ORM浅谈ORM框架之基础篇

    好奇害死猫 一直觉得ORM框架好用.功能强大集众多优点于一身,当然ORM并非完美无缺,任何事物优缺点并存!我曾一度认为以为使用了ORM框架根本不需要关注Sql语句如何执行的,更不用关心优化的问题!!! ...

  6. 手撸ORM浅谈ORM框架之Update篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  7. 手撸ORM浅谈ORM框架之Delete篇

    快速传送 手撸ORM浅谈ORM框架之基础篇 手撸ORM浅谈ORM框架之Add篇 手撸ORM浅谈ORM框架之Update篇 手撸ORM浅谈ORM框架之Delete篇 手撸ORM浅谈ORM框架之Query ...

  8. Java集合框架(四)

    Collections    集合框架的工具类    着重讲解以下方法: 1.sort(): 1º根据元素的自然顺序对指定列表按升序进行排序,列表中的所有元素都必须实现comparable接口. pu ...

  9. java 集合框架(四)Set

    一.概述 Set是一种没有重复元素的集合,它所有的方法都是直接继承自Collection接口,并且添加了一个对重复元素的限制.Set要求强化了equals和hashCode两个方法,以使Set集合可以 ...

随机推荐

  1. element-ui表格列金额显示两位小数

    对于金额的显示,大多情况下需要保留两位小数,比如下面的(表格采用 element-ui): 在vue.js中,对文本的处理通常是通过设置一系列的过滤器,过滤器可以用在两个地方:双花括号插值 和 v-b ...

  2. html2canvas截取屏幕的方法

    html2canvas截取屏幕的方法 需要放在服务上运行,否则会报错, 放在服务器里,完美运行  处理截屏模糊的方法 html2canvas 0.5.0-beta3解决截图模糊问题 需要引入html2 ...

  3. 2018-12-29-WPF-如何建立自己的-3d-gis-程序

    title author date CreateTime categories WPF 如何建立自己的 3d gis 程序 lindexi 2018-12-29 14:11:11 +0800 2018 ...

  4. 外贸电子商务网站之Prestashop 设置网站基本信息

    顶部banner图,首页各尺寸banner图.社交分享.物流支持.支付方式提醒等等设置 示例版本:1.6.1.11

  5. 封装函数通过输入(元素,属性,目标值)改变div样式

    ## 假设一个div样式如下```html<!DOCTYPE html><html lang="en"> <head> <meta cha ...

  6. 【Django入坑之路】Django后台上传图片,以及前端的显示

    #setting配置: MEDIA_URL = "/media/" MEDIA_ROOT = os.path.join(BASE_DIR, "media") # ...

  7. 【JZOJ4359】【GDKOI2016】魔卡少女

    题目描述 君君是中山大学的四年级学生.有一天在家不小心开启了放置在爸爸书房中的一本古书.于是,君君把放在书中最上面的一张牌拿出来观摩了一下,突然掀起一阵大风把书中的其她所有牌吹散到各地.这时一只看上去 ...

  8. BasicAuth memo

    string authInfo = userName + ":" + userPassword; authInfo = Convert.ToBase64String(Encodin ...

  9. 解决eclipse不会自动弹出Console控制台的问题

    有时候Eclipse启动,控制台console不会自动跳出来,需要手工点击该选项卡才行, 解决方案: windows  ->   preferences   ->  run/debug   ...

  10. 惊闻!SOIC 和 SOP 竟然是有区别的

    目录 惊闻!SOIC 和 SOP 竟然是有区别的 原因 对比 结论 惊闻!SOIC 和 SOP 竟然是有区别的 原因 一直以为 SOIC 和 SOP 是一样的,只是叫法不同. 对比 今天仔细查了才发现 ...