我将ArrayList
用于我的词典索引数据
我想制作类似的搜索系统
例如
dictionary data : 'abcd' 'bcde' 'cdef' 'fghi' 'ijkl'
如果我搜索'cd'
我想获得index '3'
在我的来源
for (String st : wordList) {
if (st.indexOf(searchWord) == 0) {
ListView.setSelection(index); //set listView scroll
break;
}
index++;
}
但花了太多时间:(
制作这个系统的最佳方法是什么?
答案 0 :(得分:1)
只需从循环中删除index ++,然后像这样更改if(CONDITION)。
for (String st : wordList) {
if (st.startsWith(searchWord)) {
System.out.println("position="+wordlist.indexOf(st));//display index in log
ListView.setSelection(wordlist.indexOf(st)); //set listView scroll
break;
}
}
答案 1 :(得分:0)
划分和规则:)
而不是将所有字典数据存储到单个列表中....为每个字符创建数组列表,如a,b,c,d(您将有26个列表:每个字母表一个)
Map<Character, List<String>> map = new HashMap<Character, List<String>>();
// creating list for each char
for(int i=0;i<26;i++){
char ch = (char) ('a' + i);
map.put(ch,new ArrayList<String>());
}
// storing some sample dictionary data or make a function for it
map.get("abcd".charAt(0)).add("abcd");
map.get("bcde".charAt(0)).add("bcde");
map.get("cdef".charAt(0)).add("cdef");
map.get("fghi".charAt(0)).add("fghi");
map.get("ijkl".charAt(0)).add("ijkl");
String searchWord = "cd";
// searh the given String
List<String> wordList =map.get(searchWord.charAt(0));
int idx =0;
for (String st : wordList) {
if (st.startsWith(searchWord)) {
idx = wordList.indexOf(st);
System.out.println("position="+idx); //display index in log
break;
}
}
// if require, In idx variable : add the size() of all list
// which come before the give searh char
// ListView.setSelection(idx); //set listView scroll
}
注意:请在搜索或存储之前将大写字词转换为小写字母。