Java forloop外部的pojo声明
我的应用程序中只有一个场景 我必须在ArrayList中添加20个POJO对象。在这种情况下,我有一个如下的方法Java forloop外部的pojo声明,java,performance,garbage-collection,Java,Performance,Garbage Collection,我的应用程序中只有一个场景 我必须在ArrayList中添加20个POJO对象。在这种情况下,我有一个如下的方法 public void methodname() { ArrayList arr = new ArrayList(); for(int i=0;i<20;i++) { User userobj = new User(); userobj.setName("xxx"); userobj.setFirstName("xxx");
public void methodname() {
ArrayList arr = new ArrayList();
for(int i=0;i<20;i++) {
User userobj = new User();
userobj.setName("xxx");
userobj.setFirstName("xxx");
userobj.setLastName("yyy");
arr.add(userobj);
} // end of for loop
}
public void方法名(){
ArrayList arr=新的ArrayList();
对于(int i=0;i它需要在循环中,否则您只添加了20次相同的用户!在第二种方法中,列表中只有最后一个对象,这两种方法都会产生不同的结果
在第一个中,您创建了20个独立的对象,并将它们添加到列表中。因此,其中一个对象的更改不会影响其他对象
然而,第二个具有相同的对象。因此,其中一个对象上的更改将反映其他对象。实际上,最后,所有对象的属性将是相同的,即等于上次添加的对象
就性能而言,您不能这么说。只有当没有指向对象的引用时,对象才有资格进行垃圾收集。但是,由于这两种方法都执行不同的功能,您无法对它们进行比较
唉,你的朋友错了。第一种方法是你正在寻找的。第一种方法和第二种方法之间的主要区别是,在第一种情况下,你在内存中创建了20个不同的用户
,分配给数组
在第二种情况下,只在内存中创建一个用户
,但将其属性更改20次,并将相同的用户
分配给数组的所有20个位置
无论第一种方案还是第二种方案,您创建的用户
实例只有在阵列本身符合垃圾收集条件时才符合垃圾收集条件,除非您删除与阵列的关联
只有当没有其他实例引用某个实例时,才会对该实例进行垃圾收集。我认为正确的方法是:
-对外申报
-内部实例化
public void methodname() {
ArrayList arr = new ArrayList();
User userobj;
for(int i=0;i<20;i++) {
userobj = new User();
userobj.setName("xxx");
userobj.setFirstName("xxx");
userobj.setLastName("yyy");
arr.add(userobj);
} // end of for loop
}
public void方法名(){
ArrayList arr=新的ArrayList();
用户userobj;
对于(int i=0;i
我想知道第二种方法是否有显著的性能改进
你经历过不同吗
编程时,您应该关注代码的正确性和可读性
甚至不要考虑性能,除非您有实际的性能问题,并且您已经通过分析证明了某个构造是原因
终极通用性能提示是:
做某事最快的方法就是不去做
因此,请关注避免不必要/隐藏循环的好算法,而不是可能提高性能的语法变体。“一位朋友建议”这不是你的朋友,因为她强迫你输入错误的代码。虽然这是绝对正确的,但它无法直接回答问题。你无法解释这两种方式之间的区别,以及它们之间的关系。
public void methodname() {
ArrayList arr = new ArrayList();
User userobj;
for(int i=0;i<20;i++) {
userobj = new User();
userobj.setName("xxx");
userobj.setFirstName("xxx");
userobj.setLastName("yyy");
arr.add(userobj);
} // end of for loop
}