我想使用Java集合查找列表中以启动字母开头的单词: 例如:
TreeMap<String, Double> tm = new TreeMap<String, Double>();
// Put elements to the map
tm.put("Zara", new Double(3434.34));
tm.put("Mahnaz", new Double(123.22));
tm.put("Ayan", new Double(1378.00));
tm.put("Daisy", new Double(99.22));
tm.put("Qadir", new Double(-19.08));
Toast.makeText(getApplicationContext(), ""+tm.get("Zar"),Toast.LENGTH_SHORT).show();
在这种情况下,它将显示null。但我想要做的是显示以该字母开头的所有单词。我怎样才能做到这一点?提前致谢
答案 0 :(得分:2)
由于TreeMap
是NavigableMap
,因此从给定密钥开始迭代地图的计算成本很低:
String prefix = "Zar";
for (String person::tm.tailMap(prefix).keySet()) {
if (person.startsWith(prefix)) {...}
}
答案 1 :(得分:0)
有几个选择:
如果您总是从前三个字符开始,那么请执行多重映射 - Map<String, List<Data>>
其中Data
包含String name
和double double
,密钥是前三个所有名字的字母。
您可以浏览TreeMap
,因为它至少排序,您知道一旦超过Zar就可以停止 - 但这仍然效率低下。
您可以使用数据库(例如嵌入Derby数据库)并使用数据库的索引/搜索/查询功能。
您可以在单词中的每个字符上构建自己的树结构分支。然后root-&gt; z-&gt; a-&gt; r将为您提供以zar开头的每个单词。 root-&gt; b-&gt; o会给你以bo等开头的每个单词。
答案 2 :(得分:0)
您只需迭代列表并检查密钥是否以给定的字符串开头。
示例:
for (String elem : tm.keySet()) {
if(elem.startsWith("Zar")) {
System.out.println(elem);
}
}
输出:
Zara
如果你想忽略这个案子:
if(elem.toLowerCase().startsWith("zar".toLowerCase()))
答案 3 :(得分:0)
TreeMap<String, Double> tm = new TreeMap<String, Double>();
//...add values.
//get all keys
Set<String> keys = tm.keySet();
Set<String> result = new HashSet<String>();
for(String key : keys){
//check the beginning of the keys
if(key.startsWith("Zar"){
result.put(key);
}
}
//get the values for your collected keys
for(String key : result){
double value = tm.get(key);
}
答案 4 :(得分:0)
如果您在代码中遇到完全相同的情况,只是阅读何时使用什么集合只会对您有所帮助。如果您不理解为什么给定数据结构对问题有好处的根源,您将无法将其应用于您自己的代码。
this链接可以帮助您
答案 5 :(得分:0)
那么你怎么能实现这个目标呢?
首先通过
查找HashMap的所有键tm.keySet()
然后在键上使用迭代器并与字符串匹配。参见下面的示例
String abc = "Zar";
HashMap s = new HashMap();
s.put("Zara", new Double(1.0));
Set x =s.keySet();
Iterator iter = x.iterator();
while (iter.hasNext()) {
String key = iter.next().toString();
if(key.startsWith(abc)){
System.out.println(s.get(key));
}
}