当遍历自定义对象的HashSet
时抛出ClassCastException
异常的原因是,HashSet
是一个泛型集合,它可以存储任何类型的对象。但是在遍历时,如果你尝试将其元素强制转换为不兼容的类型,就会抛出ClassCastException
异常。
要解决这个问题,你可以使用Iterator
接口来遍历HashSet
,并通过类型检查来确保只处理符合类型的元素。以下是一个示例代码:
import java.util.HashSet;
import java.util.Iterator;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getters and setters
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return age == person.age &&
Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
public class Main {
public static void main(String[] args) {
HashSet persons = new HashSet<>();
persons.add(new Person("Alice", 25));
persons.add(new Person("Bob", 30));
Iterator iterator = persons.iterator();
while (iterator.hasNext()) {
Person person = iterator.next();
System.out.println(person.getName() + " - " + person.getAge());
}
}
}
在上面的示例中,我们创建了一个名为Person
的自定义对象,并将其存储在一个HashSet
中。然后,我们使用HashSet
的iterator()
方法获取一个Iterator
对象,并使用while
循环遍历集合。在循环中,我们使用类型检查来确保每个元素都是Person
类型,并进行相应的操作。
这样,即使HashSet
中包含其他类型的元素,也不会抛出ClassCastException
异常。