Java 在TreeMap中查找ceratin值并保存它

Java 在TreeMap中查找ceratin值并保存它,java,treemap,type-mismatch,treeset,Java,Treemap,Type Mismatch,Treeset,我在保存一些要在树形图中查找的信息时遇到问题。该树映射(tm)以字符串作为键,以树集(不重要的对象)作为值。我想找到一个特定的键,然后将树集存储在一个变量中,以便以后使用它进行操作。我怎么做 它会弹出一个错误:“类型不匹配:无法从对象转换到树集” 就像在equals忽略的情况下一样 import java.util.*; class ArbolS extends Arbol{ private TreeMap<String, TreeSet<PLoc>> tm;

我在保存一些要在树形图中查找的信息时遇到问题。该树映射(tm)以字符串作为键,以树集(不重要的对象)作为值。我想找到一个特定的键,然后将树集存储在一个变量中,以便以后使用它进行操作。我怎么做

它会弹出一个错误:“类型不匹配:无法从对象转换到树集”

就像在equals忽略的情况下一样

import java.util.*;

class ArbolS extends Arbol{
   private TreeMap<String, TreeSet<PLoc>> tm;

  public ArbolS(){
    tm = new TreeMap<String, TreeSet<PLoc>>();
  }

  public boolean Insert(PLoc p){
    boolean found = false;
    Set it = tm.entrySet();
    Iterator iterator = it.iterator();
    Map.Entry mentry;
    TreeSet<PLoc> aux;

    while(iterator.hasNext() || found){
      mentry = (Map.Entry)iterator.next();
      if(mentry.getKey().equalsIgnoreCase(p.getPais())){
        found = true;
        aux = mentry.getValue(); //Error here
      }
    }
  }
}
import java.util.*;
类Arbol扩展了Arbol{
私人树形地图;
公共建筑{
tm=新树映射();
}
公共布尔插入(PLoc p){
布尔值=false;
设置它=tm.entrySet();
迭代器迭代器=it.Iterator();
地图、入口地图;
树集辅助;
while(iterator.hasNext()| | find){
mentry=(Map.Entry)迭代器.next();
if(mentry.getKey().equalsIgnoreCase(p.getPais())){
发现=真;
aux=mentry.getValue();//此处出错
}
}
}
}

您应该用参数化类型替换所有原始类型:

public boolean Insert(PLoc p){
    boolean found = false;
    Iterator<Map.Entry<String, TreeSet<PLoc>>> iterator = tm.entrySet().iterator();
    TreeSet<PLoc> aux;
    while (iterator.hasNext() && !found) {
        Map.Entry<String, TreeSet<PLoc>> mentry = iterator.next();
        if(mentry.getKey().equalsIgnoreCase(p.getPais())) {
            found = true;
            aux = mentry.getValue();
        }
    }
}
公共布尔插入(PLoc p){
布尔值=false;
迭代器迭代器=tm.entrySet().Iterator();
树集辅助;
while(iterator.hasNext()&&!find){
Map.Entry-mentry=iterator.next();
if(mentry.getKey().equalsIgnoreCase(p.getPais())){
发现=真;
aux=mentry.getValue();
}
}
}

请注意,我还将找到的条件
|
更改为
&&!找到
。如果
iterator.hasNext()
返回
false
,并且似乎要在找到第一个匹配项后退出循环,则无法留在循环中。

您强制转换为原始类型(
…=(Map.Entry)iterator.next();
)。尝试正确绑定泛型类型(
…=(Map.entry)此外,我建议在插入时使用
tm.put(ploc.getPais().toLowerCase(),treesetContainingPloc)
,以便循环变为
aux=tm.get(p.getPais().toLowerCase())
。谢谢,这两个注释都很有用,事实上,我想说的是&!找到了。@Turing85否-菱形运算符只允许在赋值的右侧使用(如果左侧限定了类型参数).@EduardoGomez启用IDE中的所有编译器警告,它将在您使用原始类型时告诉您。请始终解决这些警告,它们表明您的代码在语法上正确,但在大多数情况下在逻辑上不正确。