keySet
方法创建并返回一个内部类 KeySet
的实例。KeySet
扩展了 AbstractSet
,实现了一些集合相关的方法,如 iterator
、size
、contains
和 clear
。- 迭代器
KeyIterator
继承自 HashIterator
,在 next
方法中返回下一个节点的键。
import java.util.HashSet;
import java.util.HashMap;
import java.util.Set;
import java.util.Map;
class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public int hashCode() {
int result = name.hashCode();
result = 31 * result + age;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null || getClass()!= obj.getClass())
return false;
Person other = (Person) obj;
if (age!= other.age)
return false;
return name.equals(other.name);
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
public class CustomClassInCollections {
public static void main(String[] args) {
// 将自定义类元素放入 HashSet
Set<Person> personSet = new HashSet<>();
personSet.add(new Person("Alice", 25));
personSet.add(new Person("Bob", 30));
personSet.add(new Person("Alice", 25)); // 不会被添加,因为重复
// 打印 HashSet 中的元素
for (Person person : personSet) {
System.out.println(person);
}
// 将自定义类元素放入 HashMap
Map<Person, String> personMap = new HashMap<>();
personMap.put(new Person("Alice", 25), "Engineer");
personMap.put(new Person("Bob", 30), "Doctor");
// 打印 HashMap 中的元素
for (Map.Entry<Person, String> entry : personMap.entrySet()) {
System.out.println(entry.getKey() + " : " + entry.getValue());
}
}
}