Java的Array indexOf在哪里?

我必须错过一些非常明显的东西,但我已经搜遍了,找不到这个方法。

有几种方法可以使用Arrays工具类来实现。

如果数组未sorting:

 java.util.Arrays.asList(theArray).indexOf(o) 

如果数组已sorting,则可以使用二进制search来实现性能:

 java.util.Arrays.binarySearch(theArray, o) 

数组没有indexOf()方法。

也许这个Apache Commons Lang ArrayUtils方法是你正在寻找的

 import org.apache.commons.lang3.ArrayUtils; String[] colours = { "Red", "Orange", "Yellow", "Green" }; int indexOfYellow = ArrayUtils.indexOf(colours, "Yellow"); 

没有。 可以使用java.util.List *,也可以编写自己的indexOf()

 public static <T> int indexOf(T needle, T[] haystack) { for (int i=0; i<haystack.length; i++) { if (haystack[i] != null && haystack[i].equals(needle) || needle == null && haystack[i] == null) return i; } return -1; } 

*你可以使用Arrays#asList()从你的数组中创build一个

对于原语,如果你想避免装箱, 番石榴有原始数组的助手,例如Ints.indexOf (int [] array,int target)

与C#中的Array.IndexOf方法不同,JavaScript中有indexOf方法,Java的API(特别是ArrayArrays类)没有这种方法。

这个方法indexOf(和它的互补lastIndexOf一起)是在java.util.List接口中定义的。 请注意,indexOf和lastIndexOf不会被重载,只会将Object作为参数。

如果你的数组是sorting的 ,那么你很幸运,因为Arrays类定义了一系列binarySearch方法的重载,它将以最好的性能(O(log n)而不是O(n ),后者是你可以期望从indexOf完成的顺序search)。 有四个考虑因素:

  1. 数组必须按自然顺序排列,或按照您提供的比较器的顺序进行sorting,或者至less所有“小于”键的元素必须位于数组中的元素之前,是“大于”的键必须在数组中的元素后面;

  2. 您通常使用indexOf来确定键是否在数组中(通过validation返回值是否不是-1)的testing不适用于binarySearch。 您需要validation返回值是否不小于零,因为返回的值将表明该键不存在,但是如果它存在,则是索引;

  3. 如果您的数组包含多个与键相同的元素,那么您从binarySearch得到的内容是未定义的; 这与indexOf不同,它将返回将返回最后一个匹配项的第一个匹配项和lastIndexOf。

  4. 如果一个布尔数组首先包含所有的False,然后包含所有的布尔值,则布尔数组可能会被sorting,但这不算数。 没有重写binarySearch方法接受一个布尔值数组,如果你想在检测数组中第一个真实的地方出现O(log n)性能,你就必须在那里做一些聪明的事情,比如使用数组布尔和常量Boolean.FALSE和Boolean.TRUE。

如果你的数组没有sorting,而不是基元types ,你可以通过调用java.util.Arrays的asList方法来使用List的indexOf和lastIndexOf方法。 这个方法将在你的数组中返回一个AbstractList接口包装器。 它涉及最小的开销,因为它不创build数组的副本。 如上所述,这个方法不会被重载,所以这只能在引用types的数组上工作。

如果你的数组没有被sorting,而且数组的types原始的 ,那么你对Java API 就不太好运了。 编写你自己的for循环,或者你自己的静态工具方法,它肯定比asList方法具有性能上的优势,它涉及一些对象实例的开销。 如果你担心写循环遍历数组中的所有元素并不是一个优雅的解决scheme,那么接受这个就是你调用indexOf时Java API的function。 你可以做这样的事情:

 public static int indexOfIntArray(int[] array, int key) { int returnvalue = -1; for (int i = 0; i < array.length; ++i) { if (key == array[i]) { returnvalue = i; break; } } return returnvalue; } 

如果你想避免在这里写自己的方法,可以考虑使用像Guava这样的开发框架。 在那里你可以findindexOf和lastIndexOf的实现。

Java ArrayList有一个indexOf方法。 Java数组没有这样的方法。

我不记得数组中的“indexOf”,而不是为自己编写数组…除了可以使用多个java.util.Arrays#binarySearch(...)方法之一(请参阅Arrays javadoc )if你的数组包含原始types

List接口有一个indexOf()方法,您可以使用Array的asList()方法从数组中获取List。 除此之外,Array本身没有这样的方法。 它有一个binarySearch()方法的sorting数组。

arrays本身没有这个方法。 一个列表,然而,做: indexOf

你可能在考虑java.util.ArrayList ,而不是数组。

在java数组中没有直接的indexOf函数。

您可以使用以下方法对数组进行sorting

 Arrays.sort(Your_Array_Name); 

然后使用二进制search来查找索引(假设它是'c')

 result = Arrays.binarySearch(Your_Array_Name, c); 

现在结果variables将包含字符'c'的索引。