我一定漏掉了什么非常明显的东西,但我已经四处搜寻,找不到这个方法。
Arrays
实用类有几种方法可以实现此目标。java.util.Arrays.asList(theArray).indexOf(o)
theArray
是原始类型(可能会发出警告),上述代码也将编译,但您仍将得到完全不正确的结果。java.util.Arrays.binarySearch(theArray, o)
数组没有indexOf()
方法。
也许你要找的是这个Apache Commons LangArrayUtils
方法。
import org.apache.commons.lang3.ArrayUtils;
String[] colours = { "Red", "Orange", "Yellow", "Green" };
int indexOfYellow = ArrayUtils.indexOf(colours, "Yellow");
对于原始数据类型,如果想避免装箱操作,Guava提供了原语数组的帮助类例如Ints.indexOf(int[] array, int target)
这里没有单独的方法。您可以使用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()
从你的数组中创建一个。
T
是具有误导性的。它并没有提供任何类型安全性,很容易被误认为是类型安全的...最好使用 Object。 - Venkata RajuindexOf("str", new Object[] {});
、indexOf(new Object(), new String[] {});
。 - Venkata RajuindexOf("str", new Date[] {})
,indexOf(new Date(), new String[] {})
。 这两个示例中,第一个是在一个空的日期数组中查找字符串"str"的索引位置,第二个是在一个空的字符串数组中查找日期对象的索引位置。 - Venkata RajuArray
和Arrays
类)没有这样的方法。数组必须按照自然顺序或您提供的比较器的顺序排序,或者至少所有“小于”关键字的元素必须在数组中该元素之前出现,所有“大于”关键字的元素必须在数组中该元素之后出现;
您通常使用indexOf进行测试以确定关键字是否在数组中(验证返回值是否不为-1),但是在二进制搜索中,这个测试不起作用。您需要验证返回值是否小于零,因为返回的值将指示关键字不存在,但如果存在,它将预期在哪个索引位置。
如果数组中包含多个与关键字相等的元素,则从binarySearch中获得的结果是未定义的。这与indexOf不同,后者将返回第一个出现的位置,而lastIndexOf将返回最后一个出现的位置。
如果数组中包含布尔值,则可能会出现已排序的情况,如果首先包含所有false,然后包含所有true,但这不算数。没有覆盖接受布尔数组的binarySearch方法,如果要在数组中检测第一个true出现的位置并获得O(log n)性能,您将不得不做一些聪明的事情,例如使用Booleans数组和Boolean.FALSE和Boolean.TRUE常量。
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;
}
Java ArrayList
有一个 indexOf
方法。而 Java 数组就没有这样的方法。
ArrayList
- 每个 Java 的 List
都有 indexOf()
方法。 - Matt Ball我记不得除了自己编写之外,在数组上是否有“indexOf”方法...但是如果您的数组包含原始类型,您可能可以使用众多的java.util.Arrays#binarySearch(...)
方法之一(请参见Arrays javadoc)。
数组本身没有这个方法。然而,List有: indexOf
ArrayList
- 每个Java List
都有 indexOf()
方法。 - Matt BallList接口有一个indexOf()方法,你可以使用Array的asList()方法从数组中获取List。除此之外,Array本身没有这样的方法。它确实有一个用于排序数组的binarySearch()方法。
T...
的参数,实际运行时该参数的类型是T[]
,传递零个或多个类型为T
的参数会将它们包装到一个新构造的数组中并传递。如果要传递的参数已经是T[]
类型,则会绕过这种语法糖。 - Jeffrey Hantin.indexOf
)是无效的。 - AlexandruArrays.toList(list).sublist(from,to).indexOf(o)
在范围[from, to)
内搜索元素。 - Mario Carneiro