在Java中查找char索引的最佳方法是什么?

时间:2014-01-03 21:54:26

标签: java arrays

对不起,标题可能看起来像是一个虚拟问题。我是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方法?或者还有另一种简单的方法可以做到这一点,我错过了吗?

2 个答案:

答案 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;
}