【问题标题】:Android listView ArrayList similar SearchAndroid listView ArrayList 类似搜索
【发布时间】:2014-03-13 15:51:31
【问题描述】:

我使用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++;
}

但是花了太多时间:(

制作这个系统的最佳方法是什么?

【问题讨论】:

    标签: java android arraylist


    【解决方案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;
          }
      }
    

    【讨论】:

    • 如果删除索引++它不起作用我无法理解你的答案
    【解决方案2】:

    分而治之 :)

    而不是将所有字典数据存储到单个列表中......为每个 Char 创建数组列表,例如 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
    

    }

    注意:搜索或存储前请先将单词大写转小写。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多