java - 从 ArrayList<int[]> 中删除 int[]

标签 java arraylist

我正在尝试从 ArrayList 中删除一个 int[]。 由于我的代码我只有值所以我创建数组然后调用 remove();

int[] pos = new int[]{0,1};
positionList.remove(pos);

positionList是对应的ArrayList

这实际上行不通。除了像

这样遍历列表之外还有另一种可能性吗?
for (int[] pos : positionList) {
  if (posX == pos[0] && posY == pos[1]) {
    positionList.remove(pos);
    break;
  }
}

最佳答案

查看 posXposY ,我很好奇是否有类似 ArrayList<Point> 的东西对您来说是更好的解决方案。

remove 的原因找不到数组是因为新数组不是 equals到集合中已有的数组。

(new int[0]).equals(new int[0]) // false!

如果您创建自己的 Point类,然后你可以@Override equals随心所欲,你可以简单地调用remove(new Point(posX, posY)) .

您还应该考虑拥有一个 Set<Point> positionList相反,因为实现提供了更快的删除( O(1) 用于 HashSetO(log N) 用于 TreeSet )。记得@Override hashCode (如果你 @Override equals 无论如何你必须这样做),然后制作 Point implements Comparable<Point> (或提供外部 Comparator<Point> )如果你想使用 TreeSet或者需要在其他上下文中对点进行排序。

如果您的 int[]有很多元素和自定义 Point类不适用,那么您可能需要考虑切换到 List<Integer>相反(另请参阅:Effective Java 2nd Edition,第 25 条:列表优于数组)。它有 equals你需要的行为。它速度较慢,但​​可能仍然足够快。

最后,如果你坚持使用int[] , 你可以把它包裹在你自己的里面 IntArray类,并有一个 ArrayList<IntArray>反而。 @Override equalshashCode使用 Arrays.equals(int[], int[]) , 和 hashCode(int[])分别。

关于java - 从 ArrayList<int[]> 中删除 int[],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2388277/

相关文章:

java - 如何获取作为通用参数传递给 Java 函数的实体的字段?

java - 以编程方式添加 Java 文件的 SerialVersion Id

Java 套接字 - 自定义对象发送

java - ArrayList add(index, object) 与 add(object) 复杂性

java - Java ArrayList中Remove方法的歧义

Java:字符串到整数数组

java - 使用 linux-redhat 的 java 上的内存不足异常

java - 微调器所选项目出现 NullpointerException 错误

java - 将 Point 的值打印到终端

java - 我的 Android ArrayList 只显示最后添加的值