java普通for循环和for-each迭代循环的区别
PO实体类User:
package aA; public class User {
private String name; private int many;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getMany() {
return many;
} public void setMany(int i) {
this.many = i;
}
public User(int many,int id){
this.many = many;
this.id =id;
}
public User(){ }
}
PO实体类Cumster:
package aA; public class Cumster {
private String name;
private int id;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
private int many;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getMany() {
return many;
}
public void setMany(int many) {
this.many = many;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public Cumster(String name,int id){
this.name = name;
this.id = id;
}
public Cumster(){ }
}
随机产生字符串(模拟list数据添加):
package aA; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random; /**
* 字符随机生成类
*/
public class RandomDemo {
/**
* 随机产生类型枚举
*/
public static enum TYPE {
/**小字符型*/
LETTER,
/**大写字符型*/
CAPITAL,
/**数字型*/
NUMBER,
/**大+小字符 型*/
LETTER_CAPITAL,
/**小字符+数字 型*/
LETTER_NUMBER,
/**大写字符+数字*/
CAPITAL_NUMBER,
/**大+小字符+数字 型*/
LETTER_CAPITAL_NUMBER,
}
private static String[] lowercase = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o",
"p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z" }; private static String[] capital = { "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P",
"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; private static String[] number = { "1", "2", "3", "4", "5", "6", "7", "8", "9", "0" }; /**
* 静态随机数
*/
private static Random random = new Random(); /**
* 获取随机组合码
* @param num 位数
* @param type 类型
* @type
* <br>小写字符型 LETTER,
* <br>大写字符型 CAPITAL,
* <br>数字型 NUMBER,
* <br>大+小字符型 LETTER_CAPITAL,
* <br>小字符+数字 型 LETTER_NUMBER,
* <br>大字符+数字 型 CAPITAL_NUMBER,
* <br>大+小字符+数字 型 LETTER_CAPITAL_NUMBER,
*/
public static String getRandom(int num, TYPE type) {
ArrayList<String> temp = new ArrayList<String>();
StringBuffer code = new StringBuffer();
switch (type) {
case LETTER:
temp.addAll(Arrays.asList(lowercase));
break;
case CAPITAL:
temp.addAll(Arrays.asList(capital));
break;
case NUMBER:
temp.addAll(Arrays.asList(number));
break;
case LETTER_CAPITAL:
temp.addAll(Arrays.asList(lowercase));
temp.addAll(Arrays.asList(capital));
break;
case LETTER_NUMBER:
temp.addAll(Arrays.asList(lowercase));
temp.addAll(Arrays.asList(number));
break;
case CAPITAL_NUMBER:
temp.addAll(Arrays.asList(capital));
temp.addAll(Arrays.asList(number));
break;
case LETTER_CAPITAL_NUMBER:
temp.addAll(Arrays.asList(lowercase));
temp.addAll(Arrays.asList(capital));
temp.addAll(Arrays.asList(number));
break;
}
for (int i = 0; i < num; i++) {
code.append(temp.get(random.nextInt(temp.size())));
}
return code.toString();
}
// public static void main(String[] args) {
// System.out.println(RandomDemo.getRandom(10, RandomDemo.TYPE.LETTER_CAPITAL));
// }
}
测试类:
package aA; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Random; public class AA { public static void main(String[] args) {
List<User> userList = new ArrayList<User>();
Random random = new Random();
for(int i = 0;i<100000;i++){
int age = random.nextInt(100);
userList.add(new User(age,i));
}
List<Cumster> cList = new ArrayList<Cumster>();
for(int i = 0;i<100000;i++){
cList.add(new Cumster(RandomDemo.getRandom(10,RandomDemo.TYPE.LETTER_CAPITAL),i));
}
//使用普通for循环遍历
// long start = System.currentTimeMillis();
// for (int i = 0; i < cList.size(); i ++) {
// User user = userList.get(i);
// for(int j=0;j<userList.size();j++){
// Cumster cumster = cList.get(j);
// if(user.getId() == cumster.getId()){
// user.setName(cumster.getName());
// }
// }
// }
// long end = System.currentTimeMillis(); //使用for-each迭代循环遍历
List<User> strList = new ArrayList<User>();
long start = System.currentTimeMillis();
for (Cumster cumster : cList) {
for (User user : userList) {
if(cumster.getId() == user.getId()){
user.setName(cumster.getName());
strList.add(user);
}
}
}
long end = System.currentTimeMillis(); for (int i = 0; i < userList.size(); i ++) {
System.out.print(userList.get(i).getName()+",");
}
// Collections.sort(userList, Comparator.comparing(User::getId));
Collections.sort(userList, new Comparator<User>(){
/*
* int compare(RateInfo R1, RateInfo R2) 返回一个基本类型的整型,
* 返回负数表示:R1 小于R2,
* 返回0 表示:R1和R2相等,
* 返回正数表示:R1大于R2
*/
public int compare(User R1, User R2) {
//按照RateCode的年龄进行升序排列
if(R1.getId() > R2.getId()){
return 1;
}
if(R1.getId() == R2.getId()){
return 0;
}
return -1;
}
});
System.out.println();
for (User user : userList) {
System.out.println(user.getId()+":"+user.getMany()+","+user.getName());
}
System.out.println(strList.toString());
System.out.println("运行时间:"+(end-start));
}
}
结果:
1.使用for-each循环10万个数据进行循环运行时间:
2.使用普通for循环10万个数据进行循环运行时间:
java普通for循环和for-each迭代循环的区别的更多相关文章
- Java语言之循环基础;各个语句的区别
FOR: WHILE DO WHILE break 与 continue的区别 break直接中断语句跳出循环,continue跳出当前循环,后面会继续执行
- java基础3_循环语句,数组
java中的循环: Java中提供了3中循环结构: while do-while for ① 循环结构的作用? 可以不断重复执行循环结构中的代码: ② 上面的3个循环结构功能都是一样的,只是结构 ...
- java跳出外部循环
java跳出外部循环两种方法 //用flag标识 boolean flag = true; for(int i=0;i<10&&flag;i++){ for(int j=0;j& ...
- java中for循环的6种写法
有些写法上的说明写的过于武断,可能有很多不当之处,仅供参考. package ForLoop; import java.util.ArrayList; import java.util.Itera ...
- java关于for循环。
众所周知,JAVA中for循环的基本格式为: for(初始化表达式:布尔表达式:循环后更新表达式){循环体} 举个例子来说可以写成 (1)for (int x=1;x<10;x++){ Syst ...
- Java中for_each循环的使用
最近在看一些和安卓相关的书籍,看到了for_each这种循环结构,这是为了简化java的for循环而改造的一种方便使用的格式. 格式如下: for(数据类型 变量:集合) 语句块 接下来看一个例程: ...
- java中的循环方法(附带本人遇到的坑)
java循环结构 顺序结构的程序语句只能 被执行一次.如果你要同样的操作执行多次,就需要使用循环结构. java中有三种主要的循环结构: 1.while 循环 2.do...while 循环 3.fo ...
- Java基础之循环语句、条件语句、switch case 语句
Java 循环结构 - for, while 及 do...while 顺序结构的程序语句只能被执行一次.如果您想要同样的操作执行多次,,就需要使用循环结构. Java中有三种主要的循环结构: whi ...
- Java 增强 for 循环
Java 增强 for 循环 Java5 引入了一种主要用于数组的增强型 for 循环. Java 增强 for 循环语法格式如下: for(声明语句 : 表达式) { //代码句子 } 声明语句:声 ...
- java用while循环设计轮询线程的性能问题
java用while循环设计轮询线程的性能问题 轮询线程在开发过程中的应用是比较广泛的,在这我模拟一个场景,有一个队列和轮询线程,主线程往队列中入队消息,轮询线程循环从队列中读取消息并打印消息内容.有 ...
随机推荐
- visual studio 2017--括号自动补全
---恢复内容开始--- 平常在visual studio中编写C++代码,一般括号之类的都是自动补全的,最近想用来编写Python,发现括号不能补全了,很不适应. Python编写时好像括号好像默认 ...
- Android开发 layer-list详解
参考:https://blog.csdn.net/speverriver/article/details/80925686 挖坑,以后填坑
- 2016.9.3初中部上午NOIP普及组比赛总结
2016.9.3初中部上午NOIP普及组比赛总结 链接:https://jzoj.net/junior/#contest/home/1339 这次真爽,拿了个第四!(我还被班主任叫过去1小时呢!) 进 ...
- Linux 日期时间命令
cal : 显示日历 -1 显示一个月的月历 -3 显示系统前一个月,当前月,下一个月的月历 -s 显示星期天为一个星期的第一天,默认的格式 -m 显示星期一为一个星期的第一天 -j 显示在当年中 ...
- Spring框架使用ByName自动注入同名问题剖析
问题描述 我们在使用spring框架进行项目开发的时候,为了配置Bean的方便经常会使用到Spring当中的Autosire机制,Autowire根据注入规则的不同又可以分为==ByName==和 ...
- Tree and Permutation (HDU 6446) 题解
// 昨天打了一场网络赛,表现特别不好,当然题目难度确实影响了发挥,但还是说明自己太菜了,以后还要多多刷题. 2018 CCPC 网络赛 I - Tree and Permutation 简单说明一下 ...
- CentOS 编译golang
CentOS 安装Mercurial http://hi.baidu.com/lang2858/item/cda8f6026cd522e0f45ba67f 获取代码 $ hg clone -u rel ...
- HDU--3466 Proud Merchants (01背包)
题目http://acm.hdu.edu.cn/showproblem.php?pid=3466 分析:这个题目增加了变量q 因此就不能简单是使用01背包了. 网上看到一个证明: 因为如果一个物品是5 ...
- Spring Boot Starter自定义实现三步曲
实现自定义的spring boot starter,只需要三步: 1.一个Bean 2.一个自动配置类 3.一个META-INF/spring.factories配置文件 下面用代码演示这三步. 项目 ...
- Nodejs之路(二)—— Nodejs再入门
一.在Node中使用模板引擎 js代码: // art-template不仅可以在浏览器使用,也可以在node中使用 // 1.安装 npm install art-temlate模板引擎 // 2. ...