我想查找启动字母的索引,然后在java中的数组或列表中显示该项目的索引。 例如:我有:如何查找数组中项目的索引java
String[] arr={"apple","at","book","bad","car","cat"};
当我输入一个:然后我将得到索引= 0,b:我会得到索引= 2,C:我将得到索引= 4
由于我的数组项目超过20,000,所以使用线性搜索速度太慢。 和我的列表未排序,所以我也不能使用二进制搜索。 我想获得像上面的例子的项目的索引,我可以用这个解决什么?
我想查找启动字母的索引,然后在java中的数组或列表中显示该项目的索引。 例如:我有:如何查找数组中项目的索引java
String[] arr={"apple","at","book","bad","car","cat"};
当我输入一个:然后我将得到索引= 0,b:我会得到索引= 2,C:我将得到索引= 4
由于我的数组项目超过20,000,所以使用线性搜索速度太慢。 和我的列表未排序,所以我也不能使用二进制搜索。 我想获得像上面的例子的项目的索引,我可以用这个解决什么?
如果你想的话所有的索引开始具有一定的字母,然后试试这个:
同时加入的话你的阵列/列表(将保留所有的话),你也可以将其添加到每个第一个字母都包含所有索引的地图。
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);
}
}
因此,如果用户继续键入下一个字母,例如:ap?先生,它可以帮助吗? –
ap?你是不是说启动信(一封信)? – Henrik
不仅仅是一个,搜索就像是词典中的搜索词。一个字母,另一个字母,... –
您可以运行一些初始化代码(在用户开始键入字母之前)。
// 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'数组中找到它的索引。
数组是动态还是恒定? –
如果你有一个未排序的列表,一个以字母x开头的任意项目的索引是无用的,我想。 – Smutje
该数组是恒定的 –