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新手。
高洛峰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()])
這樣傳進去的陣列就會被填充,然後返回,效率高點。
阿神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都是自定义的类
前一種定義會導致類型資訊遺失,你必須強制轉型才能取得你想要的類型,而且,非常不安全。這也違背了泛型設計的初衷。
以上。
迷茫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的時候的出現了類型丟失的錯誤,自己對於泛型這部分也只是看過而已,感謝指出錯誤 @驛馬