for循环中代码效率求解 javaforfor循环 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 方式二貌似能快点,少了一步更新telNo引用的步骤,不过也不好说,还是实际测试下为好 import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 14-11-11. */public class Test4 { private List<Staff> staffList = new ArrayList<Staff>(); public static void main(String args[]){ Test4 test = new Test4(); List<String> telNos = new ArrayList<String>(); String[] staffIds =test.initStaffArray(100); long l1=System.currentTimeMillis(); Staff staff = null; String telNo = null; for(String staffId : staffIds) { // 根据staffId 查询staff 信息 staff = test.getStaffById(staffId); if(staff!=null){ telNo = staff.getMobilePhone(); } if (null != telNo) { telNos.add(telNo); } } long l2=System.currentTimeMillis(); System.out.println("耗时:"+(l2-l1)); /* long l3=System.currentTimeMillis(); Staff staff = null; for(String staffId : staffIds) { // 根据staffId 查询staff 信息 staff = test.getStaffById(staffId); if (null != staff.getMobilePhone()) { telNos.add(staff.getMobilePhone()); } } long l4=System.currentTimeMillis(); System.out.println("耗时:"+(l4-l3));*/ System.out.println(telNos); } public Staff getStaffById(String id){ for(Staff staff1:staffList){ String tempid=staff1.getId(); if(tempid.equals(id)){ return staff1; } } return null; } public String[] initStaffArray(int length){ String[] staffIds = new String[length]; for(int i=0;i<length;i++){ staffIds[i]=String.valueOf(i+1); staffList.add(new Staff(staffIds[i],"name"+staffIds[i])); } return staffIds; }}class Staff{ Staff(){ } Staff(String id,String mobilePhone){ this.id=id; this.mobilePhone=mobilePhone; } public String getId() { return id; } public void setId(String id) { this.id = id; } private String id; private String mobilePhone; public String getMobilePhone() { return mobilePhone; } public void setMobilePhone(String mobilePhone) { this.mobilePhone = mobilePhone; }}100以内没有差别,1000以上才有稍微差别 把telNo设置成局部变量,那么对telNo的赋值是可以由编译器优化掉的。而对getMobilePhone()的两次调用,则成为效率高低的关键。从现在这个例子看,二者差异应该不大,都没有什么特别复杂的操作。能想到多种不同的做法,并通过测试做出比较,就是好的程序员。 Java基础题 请问一个关于内部类的问题... 关于移除一个int[]数组中重复项的问题, 在线急等~~ java连接oracle数据库的问题 求救!张孝祥教程中多线程那一节课的例子程序! 请教:怎样将数字转化为指定格式的程序? 请问如何在java中设定空间大小 如何在这个File类对象对应的文件尾部追加而不会覆盖以前的内容??? Rose 这东西有什么优缺点? 请大家发言! 发言必有分!!!! 关于java的原子操作 请问直接打印一个对象是什么意思?谢谢 怎么实现jsp中的table框中的数据鼠标移到其中一行时在行尾显示按钮,移开按钮隐藏
import java.util.List;/**
* Created by Administrator on 14-11-11.
*/
public class Test4 { private List<Staff> staffList = new ArrayList<Staff>();
public static void main(String args[]){ Test4 test = new Test4();
List<String> telNos = new ArrayList<String>();
String[] staffIds =test.initStaffArray(100);
long l1=System.currentTimeMillis();
Staff staff = null;
String telNo = null;
for(String staffId : staffIds) {
// 根据staffId 查询staff 信息
staff = test.getStaffById(staffId);
if(staff!=null){
telNo = staff.getMobilePhone();
}
if (null != telNo) {
telNos.add(telNo);
}
}
long l2=System.currentTimeMillis();
System.out.println("耗时:"+(l2-l1));
/* long l3=System.currentTimeMillis(); Staff staff = null;
for(String staffId : staffIds) {
// 根据staffId 查询staff 信息
staff = test.getStaffById(staffId);
if (null != staff.getMobilePhone()) {
telNos.add(staff.getMobilePhone());
}
}
long l4=System.currentTimeMillis();
System.out.println("耗时:"+(l4-l3));*/
System.out.println(telNos);
} public Staff getStaffById(String id){
for(Staff staff1:staffList){
String tempid=staff1.getId();
if(tempid.equals(id)){
return staff1;
}
}
return null;
} public String[] initStaffArray(int length){
String[] staffIds = new String[length];
for(int i=0;i<length;i++){
staffIds[i]=String.valueOf(i+1);
staffList.add(new Staff(staffIds[i],"name"+staffIds[i]));
}
return staffIds; }
}class Staff{ Staff(){ } Staff(String id,String mobilePhone){
this.id=id;
this.mobilePhone=mobilePhone;
} public String getId() {
return id;
} public void setId(String id) {
this.id = id;
} private String id; private String mobilePhone; public String getMobilePhone() {
return mobilePhone;
} public void setMobilePhone(String mobilePhone) {
this.mobilePhone = mobilePhone;
}
}100以内没有差别,1000以上才有稍微差别
而对getMobilePhone()的两次调用,则成为效率高低的关键。
从现在这个例子看,二者差异应该不大,都没有什么特别复杂的操作。能想到多种不同的做法,并通过测试做出比较,就是好的程序员。