如何在Java中使用集合

时间:2013-12-18 09:49:46

标签: java collections treemap

我想使用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。但我想要做的是显示以该字母开头的所有单词。我怎样才能做到这一点?提前致谢

6 个答案:

答案 0 :(得分:2)

由于TreeMapNavigableMap,因此从给定密钥开始迭代地图的计算成本很低:

String prefix = "Zar";
for (String person::tm.tailMap(prefix).keySet()) {
  if (person.startsWith(prefix)) {...}
}

答案 1 :(得分:0)

有几个选择:

  1. 如果您总是从前三个字符开始,那么请执行多重映射 - Map<String, List<Data>>其中Data包含String namedouble double,密钥是前三个所有名字的字母。

  2. 您可以浏览TreeMap,因为它至少排序,您知道一旦超过Zar就可以停止 - 但这仍然效率低下。

  3. 您可以使用数据库(例如嵌入Derby数据库)并使用数据库的索引/搜索/查询功能。

  4. 您可以在单词中的每个字符上构建自己的树结构分支。然后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));
    }
      }