首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >pojo declaraion

pojo declaraion
EN

Stack Overflow用户
提问于 2017-05-15 15:18:31
回答 6查看 44关注 0票数 1

在我的申请中有一个场景,

我必须在ArrayList中添加20个POJO对象。在这种情况下,我有如下所示的方法。

代码语言:javascript
复制
 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

    }

其中一位朋友建议在for循环外部更改UserObj声明。

代码语言:javascript
复制
  public void methodname() {
    User userobj = new User();
ArrayList arr = new ArrayList();    
    for(int i=0;i<20;i++) {
     userobj.setName("xxx");
     userobj.setFirstName("xxx");
     userobj.setLastName("yyy");
arr.add(userobj);
    } // end of for loop

    } 

在第一种方法中,我在for循环中创建了userobj,所以当下一次迭代时,前面的userobj将有资格使用垃圾收集器。

我想知道,第二种方法是否有显著的改善?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2017-05-15 15:32:09

我想知道,第二种方法是否有显著的改善?

你经历过什么不同吗?

在编程时,您应该关注代码的正确性和可读性。

甚至不要考虑性能,除非您有实际的性能问题,并且您已经通过分析证明了特定的构造是造成性能问题的原因。

最终的通用性能提示是:

做某事最快的方法就是不去做。

因此,重点关注避免不必要/隐藏循环的好算法,而不是可能提高性能的语法变体。

票数 1
EN

Stack Overflow用户

发布于 2017-05-15 15:21:42

这两种方式,都会产生不同的结果。

在第一个中,创建20个单独的对象,并将它们添加到列表中。因此,对其中一个进行更改,不会影响其他。 然而,第二个,具有相同的对象。因此,其中一个上的更改将反映另一个。实际上,在最后,所有对象的属性都是相同的,即等于上次添加的对象 就性能而言,你不能说。只有当没有指向它们的引用()时,对象才有资格进行垃圾收集。但是,由于这两种方法都执行不同的功能,所以不能对它们进行比较。

唉,你的朋友错了。第一条路是你要找的东西。

票数 1
EN

Stack Overflow用户

发布于 2017-05-15 15:23:15

第一种方法和第二种方法的主要区别是,在第一种情况下,您在内存中创建了20个不同的User,它们被分配给数组。

在第二种情况下,您只在内存中创建一个User,但是将其属性更改20次,并将相同的User分配给数组的所有20个位置。

不管是第一种还是第二种情况,创建的User实例只有在数组本身符合垃圾收集条件时才有资格进行垃圾收集,希望您删除与该数组的关联。

只有在没有其他实例引用的情况下,才会对实例进行垃圾收集。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43983107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档