Java Set.clear()和Set.addAll()与赋值相比哪个更好?

Java Set.clear()和Set.addAll()与赋值相比哪个更好?,java,set,hashset,Java,Set,Hashset,设置集合元素时应遵循以下哪项?为什么 private Set<TestDetailEntity> testDetails = new HashSet<>(); public void setTestDetails(Set<TestDetailEntity> testDetails) { this.testDetails.clear(); this.testDetails.addAll(testDetails); }

设置集合元素时应遵循以下哪项?为什么

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;
    }
private Set testDetails=new HashSet();
公共void setTestDetails(Set testDetails){
this.testDetails.clear();
this.testDetails.addAll(testDetails);
}
公共void setTestDetails(Set testDetails){
this.testDetails=testDetails;
}

第一个循环遍历集合。我想问的是哪一种方法是有效的?这完全取决于你的目标

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

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


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

这完全取决于你的目标

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

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


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

他们做的事情不同。一个修改现有集合,将参数作为独立集合,而另一个只是一个直接赋值,将引用从参数复制到字段。我的意思是,从效率方面来说,第一个迭代集合。为什么要向下投票?向下投票是因为这是一个非常糟糕的问题-基本上你已经问过了“苹果和桔子哪个更好?“你在问题的任何地方都没有提到效率,但你突然问到了这一点?我是stackoverflow的新手。我可能没有正确地提出你可以在评论中提出的问题。但是,如果你是一个新的堆栈溢出,你可能想考虑你不是最好的位置告诉别人,他们应该如何在堆栈溢出行为。如果你问了一个糟糕的问题,你应该期待它被否决。。。这就是如此运作的方式。你可能应该好好读书,因为他们做不同的事情。一个修改现有集合,将参数作为独立集合,而另一个只是一个直接赋值,将引用从参数复制到字段。我的意思是,从效率方面来说,第一个迭代集合。为什么要向下投票?向下投票是因为这是一个非常糟糕的问题-基本上你已经问过了“苹果和桔子哪个更好?“你在问题的任何地方都没有提到效率,但你突然问到了这一点?我是stackoverflow的新手。我可能没有正确地提出你可以在评论中提出的问题。但是,如果你是一个新的堆栈溢出,你可能想考虑你不是最好的位置告诉别人,他们应该如何在堆栈溢出行为。如果你问了一个糟糕的问题,你应该期待它被否决。。。这就是如此运作的方式。你应该读一读