如何在java中的哈希映射中的sql中搜索LIKe运算符

时间:2010-11-17 09:27:13

标签: java

我想根据用户输入搜索哈希映射。假设用户给出值'A',我必须以公司名称开头显示,如果用户给出值'AB',我必须以AB公司名称开头显示。我在哈希映射中存储公司名称

4 个答案:

答案 0 :(得分:10)

  1. 使用NavigableSet

    示例:

    NavigableSet<String> company=new TreeSet<String>(); 
    Set<String> filteredSet=company.tailSet(prefix);
    for(String str:filteredSet) {
     if(str.startsWith(prefix))
      //add to list
     else
      break;
    }
    
  2. 如果您担心性能问题,请使用radix tree [wiki]trie [wiki]。与基数相比,基数树的内存效率更高。

答案 1 :(得分:3)

哈希地图真的很擅长根据一些可以适当散列的相等概念找到完全匹配。

两个选项:

  • 请改为使用列表,然后线性搜索。对于相对少量的数据,这可能非常合适。
  • 查找或实现一个trie(或前缀树),它基本上从根节点开始,并为用户键入的每个字符下降 - 结果是在该节点到达的节点下面的所有“有效端点”节点降序用户输入结束。

答案 2 :(得分:3)

您可以遍历键集并检查每个键。例如:

final String searchPrefix = "AB";
for(String key : map.keySet()){
    if(key.startsWith(searchPrefix)){
        System.out.println(map.get(key));
    }
}

或者,您可以遍历地图中的条目。

final String searchPrefix = "AB";
for(Entry<String,String> e : map.entrySet()){
    if(e.getKey().startsWith(searchPrefix)){
        System.out.println(e.getValue());
    }
}

答案 3 :(得分:0)

你应该看一下正则表达式(正则表达式)

http://download.oracle.com/javase/tutorial/essential/regex/

您的公司名称是字符串然后您可以使用

String regex = "A*";
myString.matches(regex);