对不起,标题可能看起来像是一个虚拟问题。我是java的新手,并假设我有一个char
数组,如下所示:
char[] hex = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c', 'd', 'e', 'f'
};
现在我想在该数组上找到一个项目索引,例如'a'
,但经过一些研究后我发现java的数组类没有{{1} } 方法。所以我做了以下事情:
indexOf
它工作正常,之后我尝试使用代码:
int index = new String(hex).indexOf('a');
它没有工作,在我看到this问题后,我理解了原因。但现在我很好奇为什么找到索引需要在Java中花费太多精力以及为什么我们不能直接获得索引?为什么java' int index2 = Arrays.asList(hex).indexOf('a');
类没有Array
方法?或者还有另一种简单的方法可以做到这一点,我错过了吗?
答案 0 :(得分:5)
你有几个选择......
您可以首先使用List
,这会提供indexOf()
方法。
你可以保持数组的排序并使用Arrays.binarySearch()
(虽然这可能有点过分)。
您可以(相当容易)为此编写自己的函数:
public static int indexOf(char[] array, char key) {
for (int i = 0; i < array.length; i++)
if (array[i] == key)
return i;
return -1;
}
您可以使用第三方库。例如,番石榴有Chars.indexOf()
。 Apache有ArrayUtils.indexOf()
(显然可以更好地处理空输入)。
对于特定的数组,由于它有一些不错的属性,你可以这样做:
public static int indexOf(char key) {
if ('0' <= key && key <= '8')
return key - '0';
if ('a' <= key && key <= 'f')
return key - 'a' + 10;
return -1;
}
答案 1 :(得分:3)
Arrays.asList()
的问题在于它将您的基元转换为对象(装箱),这可能是昂贵且内存效率低下。
如果您的数组未排序,请自行编写indexOf方法:
public int indexOf(char[] hex, char value){
for(int i=0; i< hex.length; i++){
if(hex[i] == value){
return i;
}
}
return -1;
}