53

我有一个名为“bob”的数组,其中包含值。

String[] bob = { "this", "is", "a", "really", "silly", "list" };

我如何知道名为 bob 的数组中是否存在“愚蠢”值而不遍历它?

4

5 回答 5

143

你可以使用List#contains方法。为此,您需要将数组转换为列表。您可以使用Arrays#asList()以下方法:

String[] bob = { "this", "is", "a", "really", "silly", "list" };

if (Arrays.asList(bob).contains("silly")) {
    // true
}
于 2013-02-13T17:28:36.490 回答
8

使用静态将数组转换为列表Arrays.asList(T)并检查List.contains(Object)以检查对象是否存在于重新调整的集合中。

    String[] bob = { "this", "is", "a", "really", "silly", "list" };
           System.out.println(Arrays.asList(bob).contains("silly"));

然而,传统方法是遍历数组并使用 equals() 检查每个元素。

于 2013-02-13T17:28:47.003 回答
6

如果您要经常检查它,您可能会发现使用 a 更有效HashSet

String[] bob = { "this", "is", "a", "really", "silly", "list" };
Set<String> silly = new HashSet<String>(Arrays.asList(bob));
boolean isSilly = silly.contains("silly");
于 2013-02-13T17:31:55.283 回答
3

这是一个简单的方法:

    ArrayList list = new ArrayList(Arrays.asList(bob ));
    if (list.contains("silly")) {
                    // my array has silly !
             }

这个想法是将您的 Array 转换为 ListArray 对象。但它会消耗额外的内存,所以在使用它之前确保它是值得的。

编辑

如果您追求性能并节省内存,则可以改用二分搜索算法:这样您就不必分配新对象:

Arrays.sort(array) 
int value = Arrays.binarySearch(array, "silly");
if (value != -1) {
// my array has silly !
}
于 2013-02-13T17:32:33.350 回答
0

上面的代码对我不起作用。我猜不允许原始类型。

必须手动完成:

char[] charlist = {'a','b','c','d'}
boolean arraycontains = false;
char tester = 'c';
for (int y=0;y<charlist.length;y++){
        if (charlist[y] == character) {
                arraycontains = true;
                break;
        }
}

if (arraycontains) {
    //true. array contains the tester;
}
else {
    //false. array does not contain the tester;
}

:)

于 2018-05-19T10:19:32.637 回答