/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不一致,元素不可以重复 * (通过哈希值来判断是否是同一个对象) * ----HashSet:底层数据结构是哈希表, * 保证数据唯一性的方法是调用存入元素的hashCode()方法 * 和equals(Object obj)方法 * HashCode值相同,才会调用equals方法 * * */
1 import java.util.HashSet;
2 import java.util.Iterator;
3 public class StudentCode {
4
5 public static void main(String []args){
6 //定义HashSet,并添加数据
7 HashSet hs=new HashSet();
8 hs.add(new Person("lisi",11));
9 hs.add(new Person("zhangsan",22));
10 hs.add(new Person("lisi",22));
11 hs.add(new Person("lisi",11));
12 //遍历数据(在用迭代器输出数据时,只能用迭代器进行数据操作:增删改查,不可用对象进行操作)
13 for(Iterator it=hs.iterator();it.hasNext();){
14 Person p=(Person)it.next();
15 System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
16 }
17 }
18 }
19 class Person{
20 private String name;
21 private int age;
22 Person(String name,int age){
23 this.name=name;
24 this.age=age;
25 }
26 public String getName(){
27 return this.name;
28 }
29 public int getAge(){
30 return this.age;
31 }
32 //重写hashCode()方法,返回一个固定的哈希值
33 public int hashCode(){
34 return 60;
35 }
36 //重写equals(Object obj)方法,定义所需要的变量比较
37 public boolean equals(Object obj){
38 //判断传入的Obj是否是由Person下转型的变量
39 if(!(obj instanceof Person))
40 return false;
41 //对传入对象上转型为Person对象
42 Person p=(Person)obj;
43 //判断两个对象是否名字和年龄相等,相等则认为是同一个对象
44 return this.name.equals(p.getName())&&this.age==p.getAge();
45 }
46 }