package com.test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; /**
* @author tzq
* @date 2019-03-13 16:48
*/ public class Test {
//公共变量
int count=0;
static List<Integer> list = new ArrayList<>(); public static void main(String[] args) throws Exception{
//new一个实现Runnable的类
Test test=new Test();
//创建1个任务
MyRunnable myRunnable1=test.new MyRunnable();
//创建5个线程
for(int i=0;i<99;i++){
Thread t = new Thread(myRunnable1);
t.start();
t.join();
}
System.out.println("线程结束");
System.out.println(list.size());
long s1=System.nanoTime();
for (Integer i :list){ }
System.out.println("foreach程序耗时:"+(System.nanoTime()-s1)+" ms"); long s2=System.nanoTime();
Iterator iter = list.iterator();
while(iter.hasNext()){
Object o = iter.next();
}
System.out.println("Iterator程序耗时:"+(System.nanoTime()-s2)+" ms"); long s3=System.nanoTime();
int size = list.size();
for(int i=0;i<size;i++){
Object o= list.get(i);
}
System.out.println("for程序耗时:"+(System.nanoTime()-s3)+" ms"); long s4=System.nanoTime();
for(int i=0;i<list.size();i++){
Object o= list.get(i);
}
System.out.println("for程序耗时:"+(System.nanoTime()-s4)+" ms"); long s5=System.nanoTime();
list.stream().forEach(x->{
Object o= x;
});
System.out.println("stream程序耗时:"+(System.nanoTime()-s5)+" ms"); }
//创建一个实现Runnable的类
class MyRunnable implements Runnable{
public void run() {
while(true){
//锁住的是同一对象
synchronized(this){
if(count>=1000000){
break;
}
list.add(count);
System.out.println(Thread.currentThread().getName()+":count:"+(++count));
//测试时,线程更容易切换
Thread.yield();
} }
} } }

foreach程序耗时:27658646 ms
Iterator程序耗时:12158150 ms
for程序耗时:7618257 ms
for程序耗时:7031677 ms
stream程序耗时:101515437 ms

Java遍历List5种方法的效率对比的更多相关文章

  1. Java——反射三种方式的效率对比

    转载自:https://blog.csdn.net/aitcax/article/details/52694423 1 使用field(效率最高)             long start = S ...

  2. PHP生成随机密码的4种方法及性能对比

    PHP生成随机密码的4种方法及性能对比 http://www.php100.com/html/it/biancheng/2015/0422/8926.html 来源:露兜博客   时间:2015-04 ...

  3. List遍历三种方法:1.for 2.增强性for 3.迭代器

    package chapter09; import java.util.ArrayList;import java.util.Iterator;import java.util.List; /* * ...

  4. 清空StringBuilder的三种方法及效率

    清空StringBuilder的三种方法及效率 大家知道对于字符串频繁拼接是使用stringbuilder.Append方法比使用string+=方法效率高很多,但有时需要清空stringbuilde ...

  5. C#判断字符串为空的几种方法和效率判断

    C#判断字符串为空的几种方法和效率判断 string定义 1.1 string str1="":会定义指针(栈),并在内存里划一块值为空的存储空间(堆),指针指向这个空间.1.2 ...

  6. C# 判断字符串为空的4种方法及效率

    在程序开发过程中,少不了要处理字符串,并且常常要判断字符串是否为空,通常有哪些判断方法,以及不同方法的效率又怎么样? 在 C# 中,通常有三种判断字符串是否为空的方法,下面分别探讨. 1.str.Le ...

  7. Golang拼接字符串的5种方法及其效率_Chrispink-CSDN博客_golang 字符串拼接效率 https://blog.csdn.net/m0_37422289/article/details/103362740

    Different ways to concatenate two strings in Golang - GeeksforGeeks https://www.geeksforgeeks.org/di ...

  8. Java字符串连接的多种实现方法及效率对比

    JDK 1.8(Java 8)里新增String.join()方法用于字符串连接.本文基于<Java实现String.join()和效率比较>一文,分析和比较四种自定义实现与String. ...

  9. 【Java必修课】判断String是否包含子串的四种方法及性能对比

    1 简介 判断一个字符串是否包含某个特定子串是常见的场景,比如判断一篇文章是否包含敏感词汇.判断日志是否有ERROR信息等.本文将介绍四种方法并进行性能测试. 2 四种方法 2.1 JDK原生方法St ...

随机推荐

  1. 强化学习(九)Deep Q-Learning进阶之Nature DQN

    在强化学习(八)价值函数的近似表示与Deep Q-Learning中,我们讲到了Deep Q-Learning(NIPS 2013)的算法和代码,在这个算法基础上,有很多Deep Q-Learning ...

  2. Spring Boot Web 开发注解篇

    本文提纲 1. spring-boot-starter-web 依赖概述 1.1 spring-boot-starter-web 职责 1.2 spring-boot-starter-web 依赖关系 ...

  3. 前端神器-神级代码编辑软件Sublime Text下载、使用教程、插件推荐说明、全套快捷键

    Sublime Text 是一个代码编辑器,也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能 ...

  4. 【深度学习系列】PaddlePaddle垃圾邮件处理实战(二)

    PaddlePaddle垃圾邮件处理实战(二) 前文回顾   在上篇文章中我们讲了如何用支持向量机对垃圾邮件进行分类,auc为73.3%,本篇讲继续讲如何用PaddlePaddle实现邮件分类,将深度 ...

  5. 微信ChatEmoji表情适配,对微信公众号开发有帮助

    最近做微信公众号时发现微信ChatEmoji表情与接受的消息显示表情的问题, 微信表情后面的ChatEmoji显示不出,花了一些时间整理,把pc和手机的表情全部都整理了, 由于有两百多个显示可能有点长 ...

  6. Servlet--创建和配置Servlet

    在web开发中,一般由Servlet进行数据流的控制,并通过HttpServletResponse对象对请求做出响应.创建的Servlet必须继承HttpServlet类,并实现doGet()和doP ...

  7. 学习day01

    1.web C/S:Client Server 客户端 服务器 QQ,... B/S:Browser Server 浏览器 服务器 PC机:Personal Computer 个人电脑 2.HTML ...

  8. js当地天气调用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  9. 数据结构java(一)数组链表

    链表是数据结构中最基础的内容,链表在存储结构上分成两种:数组形式储存,链式存储. 相比c语言需要的结构体,在java中由于有了面向对象编程,将指针‘藏’了起来,不需要分配内存. 所以只需要创建一个对象 ...

  10. Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成)

    Vue+Element的动态表单,动态表格(后端发送配置,前端动态生成) 动态表单生成 ElementUI官网引导 Element表单生成 Element动态增减表单,在线代码 关键配置 templa ...