찾다

 >  Q&A  >  본문

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新手。

迷茫迷茫2767일 전597

모든 응답(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
  • 취소회신하다