如何在数组java中查找项的索引

时间:2014-02-28 07:29:14

标签: java arrays hash

我想找到启动字母的索引,然后在java中的数组或数组列表中显示该项的索引。 示例:我有:

String[] arr={"apple","at","book","bad","car","cat"};

当我输入a:那么我将得到index = 0,b:我将得到index = 2,c:我将得到index = 4

因为我的数组项目超过20,000,所以使用线性搜索太慢了。 我的列表未分类,所以我也不能使用二进制搜索。 我想得到像上面的例子一样的项目索引,我可以解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果你想获得以某个字母开头的单词的所有索引,那么试试这个:

在将单词添加到您的数组/列表(将包含所有单词)时,您还可以将其添加到将保存每个首字母的所有索引的地图。

 Map<String, ArrayList<Integer>> myMap = new HashMap<String, ArrayList<Integer>>();

 public void yourmethod() {
    //adding all your words to an Array/arraylist goes here. (arr[] in this case)

    string firstLetter = yourword.substring(0,1);

    if(myMap.constainsKey(firstLetter)) {
       myMap.get(letter).add(yourword);
    } else {
         myMap.put(firstLetter, yourword);
    }
 }

答案 1 :(得分:0)

您可以运行一些初始化代码(在用户开始输入字母之前)。

// initialize an array that has a cell for each letter with value -1
int[] firstIndexes = new int[26];
for(int i=0;i<firstIndexes.length;i++) {
    firstIndexes[i] = -1;
}

// loop over original array and look for each letter's first occurence
for(int i=0;i<wordsArray.length;i++) {
    char c=wordsArray[i][0];
    if(firstIndexes[c-'a'] < 0) {
        firstIndexes[c-'a'] = i;
    }
}

然后当用户键入一个字母时,你只需要在'firstIndexes'数组中找到它的索引。

相关问题