如何修复list.contains(object)不返回良好的布尔变量

时间:2019-04-07 15:28:53

标签: java list arraylist random contains

我正在尝试使用一定范围内的固定大小的随机数组生成一个列表。问题是,当我想查看列表中是否已经有一个数组(list.contains(array))时,它没有返回良好的布尔变量。这是这段代码的样子,我不知道问题出在哪里:

List<int[]> list = new ArrayList<int[]>();
int[] v = new int[n];
int n = 2, val_max = 3;

while (list.size() != max) {
  v = getRandomArray(n, 1, val_max);
  if (list.contains(v) == false)
    list.add(v);
}

我希望其输出为{ {1, 2} {2, 1} {1, 3} {3, 1} {2, 3} {3, 2} },但输出会不断变化……它总是使上述值中的一或两个加倍,这使我认为问题一定来自于contains函数。

1 个答案:

答案 0 :(得分:1)

List.contains使用Object.equals检查是否相等,但是数组使用引用相等,而不是内容相等。因此.contains将始终返回false。

不幸的是,对于特定的数组,实际上只有两个选择:

  • 使用contains自己重写Arrays.equals的逻辑。
  • 将数组包装在您自己创建的新对象中,并适当地编写其相等方法。