我正在尝试创建内存数据库解决方案。 HashMap
或TreeSet
。我知道如何使用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("");
}
答案 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;
}
};