当前位置: 代码迷 >> Java相关 >> 实现方法的比较,该怎么处理
  详细解决方案

实现方法的比较,该怎么处理

热度:3104   发布时间:2013-02-25 21:48:31.0
实现方法的比较
Java code
public class People {    private int age;    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }}

实现一:
Java code
public class Test {    public static void main(String args[]) {        List<People> list = new ArrayList<People>();        List<People> list2 = new ArrayList<People>();        People people1 = null;        for (int i = 0; i < 5; i++) {            people1 = new People();            people1.setAge(i);            list.add(people1);        }                People people2 = null;        for(int j = 0;j < list.size();j++){            people2 = list.get(j);            people2.setAge(j+10);            list2.add(people2);        }    }}

实现二:
Java code
public class Test {    public static void main(String args[]) {        List<People> list = new ArrayList<People>();        List<People> list2 = new ArrayList<People>();        People people1 = null;        for (int i = 0; i < 5; i++) {            people1 = new People();            people1.setAge(i);            list.add(people1);        }                for(int j = 0;j < list.size();j++){            People people2 = list.get(j);            people2.setAge(j+10);            list2.add(people2);        }    }}


问题:
1、两个实现中list2的结果相同吗?为什么?
2、people2的声明哪种好呢?为什么?
3、建议使用哪种实现?

------解决方案--------------------------------------------------------
上面那种好点吧, 不过拉出来声明 性能应该影响不大吧
------解决方案--------------------------------------------------------
1、结果是相同的。
2、楼主不用纠结变理在循环外还是内声明有什么大的性能区别。所以让代码更清晰,表达更准确上讲,第二种更合适。个人观点。
------解决方案--------------------------------------------------------
肯定是第一种好了 第二个太浪费了
------解决方案--------------------------------------------------------
List<People> list = new ArrayList<People>();
List<People> list2 = new ArrayList<People>();
for (int i = 0; i < 5; i++) {
People people1 = new People();
people1.setAge(i);
list.add(people1);
}

for(int j = 0;j < list.size();j++){
list.get(j).setAge(j+10);
list2.add(list.get(j));
}

------解决方案--------------------------------------------------------
第一种指向同一堆空间,第二种在堆中重新创建了新对象吧
  相关解决方案