搜尋

首頁  >  問答  >  主體

java - hashmap如何获取键值?

HashMap<Teacher,Student> one = new HashMap<>();//Teacher,student都是自定义的类
one.put(wang,wan);//one.put(Teacher,Student)

应该如何获取hashMap.key我google了发现一些做法但是都没有什么用
例如

Teacher[] i = one.keyset().toArray(new Teacher[0]);

我想问一下如何获取key同时可以新定义一个对象来引用key
主要我无法解决的是one.keyset().toArray(new Teacher[0])返回的是一个超类,我没有办法强制转化,希望可以给我一点提示或者解决的方法,java新手。

迷茫迷茫2784 天前610

全部回覆(4)我來回復

  • 高洛峰

    高洛峰2017-04-17 15:32:36

    toArray方法體中是透過強制型別轉化,是根據你傳進去的型別進行強轉的。你這個new Teacher[0]就是進行傳類型用的,所以為了復用,建議直接寫

    HashMap<Teacher,Student> map = new HashMap<>();//Teacher,student都是自定义的类
    ...
    Set<Teacher> set = map.keySet();
    Teacher[] teachers = set.toArray(new Teacher[set.size()])

    這樣傳進去的陣列就會被填充,然後返回,效率高點。

    回覆
    0
  • 怪我咯

    怪我咯2017-04-17 15:32:36

    Teacher[] i = one.keyset().toArray(new Teacher[0]);

    toArray回傳的是陣列

    回覆
    0
  • 阿神

    阿神2017-04-17 15:32:36

    關於取得hashkey,請自行查閱api文件吧。熟悉jdk,對學習java來說非常重要。我保證jdk中有這樣的方法。你可以查閱hashmap或它的父類別的文檔。

    關於這個定義:

    HashMap<Teacher,Student> one = new HashMap<>();//Teacher,student都是自定义的类

    如果是我,我會選擇用:

    HashMap<Teacher,Student> one = new HashMap<Teacher,Student>();//Teacher,student都是自定义的类

    前一種定義會導致類型資訊遺失,你必須強制轉型才能取得你想要的類型,而且,非常不安全。這也違背了泛型設計的初衷。

    以上。

    回覆
    0
  • 迷茫

    迷茫2017-04-17 15:32:36

    我是這麼做的

    Map<Teacher,ArrayList> one = new HashMap<Teacher,ArrayList>();
    one.put(wang,wang.getStuList());
    Teacher i = one.keySet().toArray(new Teacher[0])[0];
    System.out.println(i.toString());

    之前一直錯的原因可能就是使用map的時候的出現了類型丟失的錯誤,自己對於泛型這部分也只是看過而已,感謝指出錯誤 @驛馬

    回覆
    0
  • 取消回覆