如何清空基本数据类型数组?

3

我有以下的类:

public class Person {

    private String id;

    private Score[] scores;

    public Person() {
    }

    //getters and setters etc
}

如何最好地删除此对象中得分数组中所有的Score对象?


1
你必须使用数组还是可以使用 List<Score> - bradimus
不好意思,我无法改变数组。 - java123999
2
Arrays.fill(scores,null) ? - Balaji Krishnan
1
可以遍历数组或者执行 scores=new Score[]; - XtremeBaumer
1
可能是Java /处理中的空数组的重复问题。 - cнŝdk
那不是一个原始数组。 - Lew Bloch
4个回答

7
重新初始化数组可以使用new Score[size]或者使用Arrays.fill方法。

scores = new Score[scores.length] is more verbose and less descriptive than Arrays.fill(scores, null) - Michael
“verbose” 是不好的吗?释放加重新分配通常会更好地支持内存管理,并且对于大型数组而言速度更快。“描述性”是一个主观的术语。至少我认为,重新分配惯用语非常描述性,就像任何有经验或知识的Java程序员一样。 - Lew Bloch

4
我会使用Arrays.fill并填充数组以null为值。
Arrays.fill(scores, null);

1

根据您的需求,有不同的选项。其中最简单的一种是将数组初始化为新数组:

 int[] scores = new Scores[]{1,2,3};
 System.out.println("scores before: " + Arrays.toString(scores));
 scores = new Scores[scores.length];
 System.out.println("scores after: " + Arrays.toString(scores));

输出:

scores before: [1, 2, 3]
scores after: [0, 0, 0]

0

Arrays.fill(myArray, null); 这并不比你自己做的任何事情有什么不同(它只是循环遍历每个元素并将其设置为null)。它不是本地的,因为它是执行此操作的纯Java代码,但如果可能的话,它是一个库函数。

当然,这并不允许您调整数组的大小(为零),如果这就是您所说的“空”。数组大小是固定的,因此如果您希望“新”数组具有不同的维度,则最好像其他答案所示那样重新分配引用到新数组。更好的方法是使用List类型,如ArrayList,它可以具有可变大小。


当然,这并不允许您调整数组的大小(为零)。拥有大小为零的数组是毫无意义的。它永远不会对任何事情有用。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接