【问题标题】:How to return and clear a list?如何返回和清除列表?
【发布时间】:2017-01-12 03:41:41
【问题描述】:

我想知道是否有更优雅的方法来返回属性并更改/“重置”其值。这就是我现在一直在做的方式:

[...]

final List<T> copyOfOriginal = new ArrayList<T>(original);
original.clear();

return copyOfOriginal;

[...]

我真的必须复制整个列表吗?

【问题讨论】:

  • 如果您尝试克隆 Arraylist,那么这很好。您正在解决的实际问题是什么?
  • @cricket_007 我想返回并清除列表而不克隆它......这很容易实现(参见 NPE 的答案)
  • 什么是original?是方法参数还是类中的字段(或两者)?
  • @Pshemo 这是我不想返回和清除的列表
  • "list I wan't to return and clear" 表示您要返回空列表,这不是您的代码显示的内容。我问了上一个问题,因为如果originalList&lt;T&gt; cloneAndClear(List&lt;T&gt; original) 之类的方法的参数并且您将像List&lt;T&gt; newList = cloneAndClear(someList); 一样使用它,那么作为参数传递的someList 将不会被NPE 解决方案清除,因为它只交换local 引用(因为 Java 是按值传递的)。所以这里的上下文很重要,应该澄清问题。

标签: java performance list return return-value


【解决方案1】:

在许多情况下,可以简单地用新的空列表替换列表,同时返回原始引用:

final List<T> ret = original;
original = new ArrayList<T>();
return ret;

这里需要注意的是,这会更改原始引用。如果有多个副本,则可能需要格外小心。

【讨论】:

  • 是的,这很简单......我自己怎么能想出这个:P
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多