【发布时间】:2021-05-25 07:03:27
【问题描述】:
我收集了很多String就是包名,把这些字符串作为key放到map中,value就是key的别名。 (我选择了 TreeMap
喜欢:
Map<String, String> packages = new TreeMap<>();
packages.put("org.springframework.boot.actuate", "SpringBoot@Actuate");
packages.put("org.springframework.boot.aop", "SpringBoot@AOP");
packages.put("org.apache.ibatis", "Mybatis@Core");
packages.put("org.mybatis.spring", "Mybatis@Spring");
packages.put("org.slf4j", "SLF4j@Core");
packages.put("ch.qos.logback.core", "Logback@Core");
那么,方法参数为全限定类名的指定值,我需要返回alias(value)对应包(key)的值
喜欢:
// className: ch.qos.logback.core.layout.EchoLayout
@Nullable
String find(String className) {
// method implementation
return ""; // return Logback@Core
}
我想使用 TreeMap.subMap() 从第一级包名逐步查找,并递归进行
喜欢:
// !!! pseudocode !!!
@Nullable
String find(String className, int position) {
int idx = className.indexOf(".", position);
String pkg = className.substring(0, idx);
Map<String, String> sub = packages.subMap(pkg, pkg + " ");
if (sub.size() == 1) {
return ""; // found it
} else {
return ""; // other situations
}
return ""; // not found any alias
}
我不确定这是最有效的方法,这个方法会被频繁调用。谁能提供更好的解决方案?
【问题讨论】:
标签: java string performance dictionary