如何在树集上搜索以查找大于或小于或不区分大小写的值?

时间:2017-05-02 17:16:58

标签: java hashmap treeset

我正在尝试创建内存数据库解决方案。 HashMapTreeSet。我知道如何使用contains搜索值,如果这是一个正常的数据库情况,这将更容易。但是,如果我试图通过不区分大小写或者数值大于或小于某个值来搜索值,那么在这种情况下我该如何处理呢?

这是我的姓氏方法,但它只是一个简单的包含,如果它不区分大小写,则找不到

case 4:
    Scanner input4 = new Scanner(System.in);
    System.out.println("Search Last Name ");
    String retLn = input4.nextLine();

    if(employeeKey.containsKey(retLn))
    {
          EmpManager searchedEmp = employeeKey.get(retLn);
          System.out.println(searchedEmp);
          System.out.println("");
    }

    else
    {
          System.out.println("No Last Name Found");
          System.out.println("");
    }

3 个答案:

答案 0 :(得分:1)

您可以将TreeMap与自定义Comparator一起使用。

当您需要不区分大小写的比较时:

new TreeMap<String,V>(String.CASE_INSENSITIVE_ORDER);

当您想要基于整数的比较时:

new TreeMap<Integer,V>(Comparator.naturalOrder());

或者只使用默认比较器:

new TreeMap<Integer,V>();

要查找大于或小于某个值的所有条目,请使用headMap(), tailMap() or subMap()

答案 1 :(得分:0)

根据您当前的解决方案,只需确保在您添加Map时将转换为 lowerCase 以使其不区分大小写,这样可以更容易地比较后面的用户输入,例如

if(employeeKey.containsKey(retLn.toLowerCase())) // considering the keys inside the map are all lowercase

如果您以后想要根据某个给定范围进行搜索,那么您可以这样做:

map.forEach((key, value) -> {
     if(key.equalsIgnoreCase(retLn) && value > someValue && value < someValue){
           // access the value here
     }
});

答案 2 :(得分:0)

您可以覆盖containsKey()定义中的HashMap方法。

例如:

HashMap<String, Integer> map = new HashMap<String, Integer>() {     
  @Override
  public boolean containsKey(Object key) {
    for (String s : this.keySet()) {
      String keyString = (String) key;
      if (keyString.equalsIgnoreCase(s)) 
        return true;
      }
      return false;
  }
};