黑马程序员技术交流社区
标题:
HashSet集合抛异常
[打印本页]
作者:
Johnny_Hu
时间:
2015-4-8 21:36
标题:
HashSet集合抛异常
package SetPackage;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetDemo1 {
public static void main(String[] args)
{
HashSet hs = new HashSet();
hs.add("Java04");
hs.add("Java03");
hs.add("Java02");
hs.add("Java02");
hs.add("Java01");
hs.add("Java01");
hs.add("Java01");
for(Iterator it = hs.iterator(); it.hasNext();)
{
Person2 obj = (Person2) it.next();
System.out.println(obj.toString()+" ");//迭代器输出
}
}
}
class Person2
{
private String name;
private int age;
Person2(String name,int age)
{
this.name = name;
this.age = age;
}
public void setName(String name)
{
this.name = name;
}
public void setAge(int age)
{
this.age = age;
}
public String toString()
{
return this.name+this.age;
}
public int hashCode()
{
return name.hashCode()+age*13;
}
public boolean equals(Object obj)
{
Person2 p =(Person2)obj;
if(obj instanceof Person2)
return false;
return this.name.equals(p.name) && this.age == p.age;
}
}
复制代码
抛出这个异常java.lang.ClassCastException:当试图将对象强制转换为不是实例的子类时,抛出该异常
可是我另外写的一个demo跟这个几乎一样的 可是那个为什么就可以强转呢?
作者:
关山明月
时间:
2015-4-8 23:12
Person2类中的equals方法有问题
public boolean equals(Object obj)
{
if(!(obj instanceof Person2))
return false;
Person2 p =(Person2)obj;
return this.name.equals(p.name) && this.age == p.age;
}
复制代码
应该是判断对象不是Person2类型时返回false 另外,在迭代器获取集合中元素的时候,你的集合中的元素明明都是String类型的,为嘛要加这句 Person2 obj = (Person2) it.next(); 将String类型转换成Person2类型这样肯定会出异常。。。
作者:
Johnny_Hu
时间:
2015-4-9 19:56
关山明月 发表于 2015-4-8 23:12
Person2类中的equals方法有问题
:)太谢谢你了 上面的 hs.add(new Person2("Java4", 02)); 忘记写new Person2
难怪提示强转失败了
太谢谢你了
作者:
lf027
时间:
2015-4-9 20:30
恩呢,看着看着就懂了好多,知道怎么看代码了
作者:
Catface
时间:
2015-4-9 21:01
前来学习了!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2