【问题标题】:Index of an element in ArrayList of arrays数组 ArrayList 中元素的索引
【发布时间】:2016-09-30 11:19:20
【问题描述】:

我有一个二元素数组列表,如下所示:

ArrayList<int[]> list = new ArrayList<int[]>();

我可以使用 list.get() 从这个列表中获取一个元素,但是尝试获取已知元素的索引不起作用:

int[] array = list.get(0); //returns an array
int index = list.indexOf(array); //returns -1

我正在使用处理 3.2.1
我做错了什么?

【问题讨论】:

  • 不确定,你是怎么做的,你在哪个版本的java上做。但它在 java8u51 上运行良好。在这里查看https://ideone.com/XEd0rf
  • 我没有用java,我用的是Processing

标签: arrays arraylist processing


【解决方案1】:

这将起作用:

ArrayList<int[]> list = new ArrayList<int[]>();
list.add(new int[]{1, 2});

int[] array = list.get(0);

int index = list.indexOf(array); 
println(index);

这不会:

ArrayList<int[]> list = new ArrayList<int[]>();
list.add(new int[]{1, 2});

int[] array = new int[]{1, 2};

int index = list.indexOf(array); 
println(index);

indexOf() 函数使用equals() 函数来确定对象是否等于每个索引处的元素。不幸的是,数组的行为并不像您预期​​的那样,因此具有相同元素的两个不同数组不相等

int[] arrayOne = {1, 2};
int[] arrayTwo = {1, 2};
println(arrayOne.equals(arrayTwo));

这是因为数组使用实例相等,所以数组只有当它们是完全相同的数组时才相等!这就是为什么第一个代码块有效,而第二个代码块无效的原因。

解决此问题的一种方法是创建一个包含数组的包装对象,然后覆盖equals() 函数以实际比较数组中的元素。但是既然你的数组只有两个索引,你为什么不创建一个有两个变量的类,然后重写 equals 函数呢?或者只使用PVector 实例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2020-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多