关于keySet()的疑问 实例化接口 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 Set<String> keySet=hm.keySet(); 语句中hm.KeySet();返回的是一个实现Set接口的子类实例对象、 keySet=hm.keySet(); 可理解为父类引用指向子类对象即是多态。 keySet()函数返回了一个实现了Set接口的实例,该实例的真正实现类未开放。这个很正常啊 这个实现Set的对象是什么类型?总得是一个什么Set的类对象吧,式HashSet还是其他的什么Set? hashMap.keySet() 返回了一个hashSet 对象hashSet 不就是 Set 的一个实现类么?有类就有对象了啊 你的接口只是一个引用,引用的对象HashSet是实例,调用的是实例中的方法。 //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); } 首先接口虽然不能被实例化,但可以声明该接口的变量,即 Set<String> keySet;接口的变量必须引用实现了接口的类对象,即keySet=hm.keySet();剩下的就和1楼说的一样了 看楼主应该是刚接触java不多久吧,这就是对Set接口赋值为实现类的对象啊,hm.keySet()你可以理解为返回的是一个Hashset对象, Set<String> s=new HashSet<String>(); 此处hm.keySet() 就是一个HashSet<String> 对象,可以这样理解。 你debug一下,看看这个keySet(..)到底返回了什么?Set a = xxx;这个a只是一个引用,接口的引用可以指向任何实现了接口的类的实例,这也是实现多态的前提 LZ,接口是可以实例化的。接口和接口实现类的关系,往深了说,就是子类继承父类。父类对象完全可以初始化为子类内容。包括map也是接口,你的第一行代码:HashMap<String, String> hm = new HashMap<String, String>();,完全可以写成Map<String, String> hm = new HashMap<String, String>();可以试试看。keySet()这个方法能让你取出HashMap集合中所有的键,还有一个方法是entrySet(),能把一个集合中的关系都取出来。 可以看JDK的源码,你就知道是怎么实现的了。具体方法:http://blog.csdn.net/bruce128/article/details/6887732 哦,之前没注意这个问题,返回为set虽然是接口,但是在keySet中返回的是set的子类实例,可以多态下 求教java语法问题 DefaultTableModel的问题,大家帮帮我。 关于中文乱码问题 求助:关于线程同步的程序? 请教Formula One打印问题 有没有关于数组运算的函数? C++和Java数据转换问题,请高手指教! 如何在java中给某一个方法的参数指定默认值! 关于 JNDI 和 MySql Connecton/J 的连接池的使用问题 请问大家用什么软件可以打开*.ppt文件 关于memcached的问题 新手请教常量池和类赋值的内存问题
语句中hm.KeySet();返回的是一个实现Set接口的子类实例对象、 keySet=hm.keySet(); 可理解为父类引用指向子类对象即是多态。
hashSet 不就是 Set 的一个实现类么?
有类就有对象了啊
//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);
}
这个a只是一个引用,接口的引用可以指向任何实现了接口的类的实例,这也是实现多态的前提
包括map也是接口,你的第一行代码:HashMap<String, String> hm = new HashMap<String, String>();,完全可以写成
Map<String, String> hm = new HashMap<String, String>();可以试试看。keySet()这个方法能让你取出HashMap集合中所有的键,还有一个方法是entrySet(),能把一个集合中的关系都取出来。
具体方法:http://blog.csdn.net/bruce128/article/details/6887732