如何在Java中使用集合

如何在Java中使用集合,java,collections,treemap,Java,Collections,Treemap,我想使用Java collection查找列表中以启动字母开头的单词: 例如: 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("Ay

我想使用Java collection查找列表中以启动字母开头的单词: 例如:

  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();
TreeMap tm=newtreemap();
//把元素放到地图上
tm.put(“Zara”,新双(3434.34));
tm.put(Mahnaz,新双(123.22);;
tm.put(“阿扬”,新双(1378.00));
tm.put("雏菊",新双色(99.22);;
tm.put(“Qadir”,新双(-19.08));
Toast.makeText(getApplicationContext(),“”+tm.get(“Zar”),Toast.LENGTH\u SHORT.show();

在这种情况下,它将显示null。但我想做的是展示所有以这个字母开头的单词。我该怎么做?提前感谢

有几种选择:

  • 如果总是从前三个字符开始,则执行多重映射-
    映射
    ,其中
    数据
    包含
    字符串名称
    双精度
    ,键是所有名称的前三个字母

  • 您可以扫描
    树状图
    ,因为它是排序的,所以至少您知道,一旦通过Zar,您可以停止,但这仍然是低效的

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

  • 您可以在单词中的每个字符上构建自己的树结构分支。然后root->z->a->r将给出以zar开头的每个单词。root->b->o会给出每个以bo开头的单词,等等


  • 您只需迭代列表并检查键是否以给定字符串开头

    例如:

          for (String elem : tm.keySet()) {
              if(elem.startsWith("Zar")) {
                  System.out.println(elem);
              }
          }
    
    输出:

    Zara
    
    如果你想忽略这个案例:

    if(elem.toLowerCase().startsWith("zar".toLowerCase()))
    
    TreeMap tm=newtreemap();
    //…增加价值。
    //拿到所有钥匙
    设置键=tm.keySet();
    Set result=new HashSet();
    用于(字符串键:键){
    //检查钥匙的开头
    if(钥匙起动带(“Zar”){
    结果:输入(键);
    }
    }
    //获取收集的密钥的值
    for(字符串键:结果){
    双值=tm.get(键);
    }
    
    只有在代码中遇到完全相同的情况时,阅读何时使用什么集合才会对您有所帮助。如果您不理解给定数据结构解决问题的根本原因,您将无法将其应用于自己的代码


    链接可能会帮助您

    那么您如何实现这一点呢

    首先通过查找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));
        }
          }
    

    由于
    TreeMap
    是一个函数,因此从给定的键开始迭代映射在计算上比较便宜:

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

    tm.get(“Zar”)与tm.get(“Zara”)完全不同,因此,我如何才能仅使用启动字母从中获取密钥?此功能是否还有更多可用的集合?如果我从数据库中有200000多个条目并将其添加到tm中。使用这种用法,它是否运行快速且平稳?因为我使用for()进行测试Arraylist=>每次搜索单词时它似乎运行缓慢在这种情况下,我会在对键集排序后搜索,并检查是否可以取消搜索。对于性能问题:始终在实际设置中测试它。如果当前解决方案没有问题,则无需对其进行优化。
    String prefix = "Zar";
    for (String person::tm.tailMap(prefix).keySet()) {
      if (person.startsWith(prefix)) {...}
    }