【问题标题】:Set.clear() and Set.addAll() vs Assignment which is better? [duplicate]Set.clear() 和 Set.addAll() 与 Assignment 哪个更好? [复制]
【发布时间】:2016-08-16 05:33:08
【问题描述】:

在设置 Set 元素时应遵循以下哪项,为什么?

private Set<TestDetailEntity> testDetails = new HashSet<>();

public void setTestDetails(Set<TestDetailEntity> testDetails) {
        this.testDetails.clear();
        this.testDetails.addAll(testDetails);
    }


public void setTestDetails(Set<TestDetailEntity> testDetails) {
        this.testDetails = testDetails;
    }

第一个迭代集合。我在这里想问的是哪种方法有效?

【问题讨论】:

  • 他们做不同的事情。一个修改现有集合,将参数作为独立集合,而另一个只是直接赋值,将引用从参数复制到字段。
  • 我的意思是在效率方面,第一个迭代集合。为什么 Downvote?
  • 投了反对票,因为这是一个非常糟糕的问题——你基本上问过“哪个更好,苹果还是橙子?”您在问题的任何地方都没有提到效率,但突然间这就是您要问的问题?
  • 好吧,我是 stackoverflow 的新手。我可能没有正确地提出您可以在 cmets 中提出的问题。但是投反对票不是这样做的方法。
  • 如果您是 Stack Overflow 的新手,您可能需要考虑到您不适合告诉其他人他们在 Stack Overflow 上应该如何表现。如果您提出一个不好的问题,您应该期望它会被否决……这就是 SO 的工作方式。您可能应该阅读codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question

标签: java set hashset


【解决方案1】:

这完全取决于你的目标。

第一个获取集合内容的副本

第二个保留对传入集合的引用,与调用代码共享。

在没有更多设计约束的情况下,两者都不是首选,尽管如果setTestDetails 将保留对传入集的引用,则应明确记录。 (实际上,无论哪种方式都应该清楚地记录下来。)

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-05
    • 2018-04-15
    • 2013-11-01
    相关资源
    最近更新 更多