解决方案 »

  1.   

      Set<String> keySet=hm.keySet(); 
    语句中hm.KeySet();返回的是一个实现Set接口的子类实例对象、  keySet=hm.keySet(); 可理解为父类引用指向子类对象即是多态。
      

  2.   

    keySet()函数返回了一个实现了Set接口的实例,该实例的真正实现类未开放。这个很正常啊
      

  3.   

    这个实现Set的对象是什么类型?总得是一个什么Set的类对象吧,式HashSet还是其他的什么Set?
      

  4.   

    hashMap.keySet() 返回了一个hashSet 对象
    hashSet 不就是 Set 的一个实现类么?
    有类就有对象了啊
      

  5.   

    你的接口只是一个引用,引用的对象HashSet是实例,调用的是实例中的方法。
      

  6.   


    //java8
        /**
         * 打印map.->java 8 版本.
         *
         * @param maps
         */
        private static void showMap(Map<Object, List<Grade>> maps) {
            maps.forEach((key,value) -> System.out.println(key));
        }    /**
         * 打印map.java7版本.
         *
         * @param maps
         */
        private static void showMap7(Map<Object, List<Grade>> maps) {
            List<Grade> g = new ArrayList<Grade>();
            for (Object o : maps.keySet()) {
                g = (List<Grade>) maps.get(o);
                for (int i = 0; i < g.size(); i++) {
                    System.out.println(g.get(i).getId() + "-->" + g.get(i).getName());
                }
            }
        }// list
      private static void sortArrayList(int size){
            List<Integer> list = new ArrayList<Integer>(size+5);
            Random random = new Random();
            for (int i = 0; i <= size; i++) {
                list.add(random.nextInt(100));
            }
            list.sort((o1,o2) -> o1.compareTo(o2));
            list.forEach(System.out::println);
        }
      

  7.   

    首先接口虽然不能被实例化,但可以声明该接口的变量,即 Set<String> keySet;接口的变量必须引用实现了接口的类对象,即keySet=hm.keySet();剩下的就和1楼说的一样了
      

  8.   

    看楼主应该是刚接触java不多久吧,这就是对Set接口赋值为实现类的对象啊,hm.keySet()你可以理解为返回的是一个Hashset对象, Set<String> s=new HashSet<String>();  此处hm.keySet() 就是一个HashSet<String> 对象,可以这样理解。
      

  9.   

    你debug一下,看看这个keySet(..)到底返回了什么?Set a = xxx;
    这个a只是一个引用,接口的引用可以指向任何实现了接口的类的实例,这也是实现多态的前提
      

  10.   

    LZ,接口是可以实例化的。接口和接口实现类的关系,往深了说,就是子类继承父类。父类对象完全可以初始化为子类内容。
    包括map也是接口,你的第一行代码:HashMap<String, String> hm = new HashMap<String, String>();,完全可以写成
    Map<String, String> hm = new HashMap<String, String>();可以试试看。keySet()这个方法能让你取出HashMap集合中所有的键,还有一个方法是entrySet(),能把一个集合中的关系都取出来。
      

  11.   

    可以看JDK的源码,你就知道是怎么实现的了。
    具体方法:http://blog.csdn.net/bruce128/article/details/6887732
      

  12.   

    哦,之前没注意这个问题,返回为set虽然是接口,但是在keySet中返回的是set的子类实例,可以多态下