Set set = hashMap.keySet();
//问题1:hashMap.keySet方法返回一个Set对象,Set是接口,
//接口可以有引用,并指向其子类对象。但是怎么可以有一个引用set指向自己的对象呢?
Iterator i = set.iterator();
while(i.hasNext()){
String s = i.next();//这里提示错误,应该把s的类型改为person
//问题2:i.next方法应该返回一个String,这里为什么会报错?
//并提示应该把s的类型改为person?
System.out.println(i.next());//而这里直接打印出的又是person。
}
}
}
class Person {
int age;
Person(int age){
this.age = age;
}
@Override
public boolean equals(Object obj) {
Person s = (Person)obj;
return this.age == s.age;
}
@Override
public String toString() {
return "Person age = "+ age;
}
}
作者: 杨震 时间: 2012-9-8 15:16
你注释的有问题,i.next返回的是个object对象,要强制转换为String,你用泛型就可以了;另外你的while循环里面调用两次i.next是不行的,因为你只测试了一次i.hasNext作者: 陈振兴 时间: 2012-9-8 23:36
1)HashMap底层也是用数组,HashSet底层实际上也是HashMap,HashSet类中有HashMap属性(API中查属性)。HashSet实际上为(key.null)类型的HashMap。有key值而没有value值。
接口没有构造方法,所以就不能生成对象。但可引用实现类(在这里正确的说是继承),典型的接口多继承。但是只能使用父类的引用访问父类中的成员(这句是多态的扩展性,也是多态的弊端)。
Set set = new SortedSet();父接口的引用调用子接口的对象,调用父接口的方法(这就是说父接口必须在重多子接口中的功能全,专业术语上说就是功能扩展越界)
SortedSet set = new SortedSet();(对照类来理解字接口)
总结:我刚写完后感觉出问题了,自己有点晕了,就翻阅资料,共同学习!
2) i.next()返回的是对象(没有指定系统默认就是Object父类对行啊),基于Iterator
Person obj = (Person)i.next();就是向上转型,
加上泛型Iterator<Person>就在遍历时不用指定类型了。 作者: 商秀川 时间: 2012-9-9 12:42
//问题1:hashMap.keySet方法返回的是Set一个子类对象,
Iterator i = set.iterator();
while(i.hasNext()){
String s = i.next();//i.next()获得的是Object对象,这里需要强制转换,应该改成:String s = (String)i.next();
System.out.println(i.next());//这里应该直接输出s,如果你在打印i.next()将输出第二次迭代的结果。 作者: 广驰 时间: 2012-9-9 13:09