解决方案 »

  1.   

    方式二貌似能快点,少了一步更新telNo引用的步骤,不过也不好说,还是实际测试下为好
      

  2.   

    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以上才有稍微差别
      

  3.   

    把telNo设置成局部变量,那么对telNo的赋值是可以由编译器优化掉的。
    而对getMobilePhone()的两次调用,则成为效率高低的关键。
    从现在这个例子看,二者差异应该不大,都没有什么特别复杂的操作。能想到多种不同的做法,并通过测试做出比较,就是好的程序员。