2014-02-23 19 views
1

我有一个ArrayList包含int[]我怎么能找到我的ArrayList的int []是否包含一个int []

假设Arrays.equals(int[], (a value in the arrayList)) = true

为什么当我做arrayOfInts.contains(int[])这是假的呢?

我认为这是因为相同的原因,(int[] == (a value in the arrayList)) = false但我应该得到这个错误?

我能以某种方式纠正它吗?

TL; DR:我可以使用Arraylist.contains()对于int []


编辑:

ANSWER(如果有人在未来搜索这这里是我作为一个做的比较码溶液):

private boolean arraylistContains(int[] comparison, ArrayList<int[]> arrayListToCompare){ 
    for(int[] values: arrayListToCompare){ 
     if (Arrays.equals(comparison, values)){ 
      return true; 
     } 
    } 
    return false; 
} 
+1

你能展示一些有效的代码示例,最好是那些你实际测试你的代码的吗?什么是'int [] 1'应该做的? –

+1

它是Java吗?只是想知道为什么奇怪的语法... – Trein

+0

修复了语法。 “int [] 1”的意思是表明它不仅是int []而是int中的一个值。抱歉的混淆。 – deadfire19

回答

8

阵列存储列表只对数组的引用,而不是其内容,因此只能够说,如果列表中包含的确切参考,输入您输入的数组。它不评估数组的内容。

如果您需要检查,如果列表包含具有特定值的数组,则必须迭代列表并使用Arrays.equals(arr1, arr2)

+0

只是为它做了一个功能。谢谢。认为可能有内置的方法。 – deadfire19

0

你不能因为

int[] a = { 1,2,3 }; 
    int[] b = { 1,2,3 }; 
    List<int[]> list = new ArrayList<int[]>(); 
    list.add(a); 
    list.contains(b); // is false 

a不等于b,这意味着a.equals(b)将返回false。方法Collection.contans(Object)正在使用equals来检查一个对象是否已经在一个集合中。因此,如果a.equals(b)false,您会发现该数组即使看起来相同,也不在该集合中。

有一个例外。如果他们真的是相同的对象contains将返回true。请看下图:

int[] a = { 1,2,3 }; 
    List<int[]> list = new ArrayList<int[]>(); 
    list.add(a); 
    list.contains(a); // is true 
+1

你能澄清一下吗?任何看到你帖子的新用户都不会知道你想说什么,因为他们看起来一样。 –

+0

查看'java.util.AbstractCollection'方法'contains'。 – 2014-02-23 15:03:13

0

REFER - >https://stackoverflow.com/a/106351/1897935

ArrayList<Object> list = ...; 
for (Object o : list) { 
     if (o.getClass().equals(Integer.TYPE)) { 
      handleInt((int)o); 
     } 
     else if (o.getClass().equals(String.class)) { 
      handleString((String)o); 
     } 
     ... 
    } 
1

你不能,很遗憾。我可能会将该数组包装在另一个对象中,并将其放入列表中。喜欢的东西(没有经过测试):

public class IntArrayWrapper { 
    private final int[] intArray; 
    public IntArrayWrapper(int[] intArray) { 
     this.intArray = intArray; 
    } 
    @Override 
    public int hashCode() { 
     return Arrays.hashCode(intArray); 
    } 
    @Override 
    public boolean equals(Object other) { 
     return other instanceof IntArrayWrapper && Arrays.equals(this.intArray, ((IntArrayWrapper) other).intArray); 
    } 
} 

然后,如果你将来决定更换与HashSet的ArrayList中,例如,这将是简单的(你可能会得到一些不错的性能提升)。

相关问题