Set集合
Set集合里面的方法和Collection里面的方法一样,没有什么特有的方法,主要学什么?学Set集合的子类如何保证元素的唯一(如何保证元素不重复)
HashSet实现了Set接口,有哈希表(实际是一个HashMap实例)支持,它不保证set的迭代顺序,特别是它不保证该顺序恒久不变,此类允许使用null元素
Set集合的特点:无索引,不可以重复,无序(存取不一致)
问题:HashSet集合存储自定义对象,HashSet不能保证元素的唯一,new的对象每一个都有自己的地址值
我们认为同姓名同年龄是同一个人,如何做?Person类里面重写equals方法,但是还是全部打印了,为啥呢?equals方法没有被执行
1 package com.test.Set; 2 3 import com.test.bean.Person; 4 import java.util.HashSet; 5 6 7 public class Demo1702_HashSet { 8 9 //HashSet存储自定义对象保证元素唯一性 10 //为什么要存储自定义对象?因为你存储java给我们提供的已有的对象的话,我们不知道它重写了哪些方法来决定它保证元素唯一 11 //现在我们存储的是自定义的对象,自定义对象是我们自己写的,什么方法都没有重写,看看有什么特点? 12 //一个类有什么特点,是由她的功能决定的,HashSet保证元素的唯一是因为里面有个功能可以保证元素唯一 13 14 public static void main(String[] args) { 15 16 HashSet<Person> hs = new HashSet<Person>();//创建HashSet对象 17 hs.add(new Person("张三",24)); 18 hs.add(new Person("张三",24)); 19 hs.add(new Person("李四",24)); 20 hs.add(new Person("李四",24)); 21 hs.add(new Person("李四",24)); 22 hs.add(new Person("李四",24)); 23 24 //System.out.println(hs.size());//打印结果是6 25 System.out.println(hs); 26 //new Person() new的对象每一个都有自己的地址值,所以都打印了 27 } 28 }
1,Person类重写了toString方法
1 package com.test.bean; 2 3 4 public class Person { 5 6 private String name ; 7 private int age; 8 9 public Person() { 10 } 11 12 public Person(String name, int age) { 13 this.name = name; 14 this.age = age; 15 } 16 17 public String getName() { 18 return name; 19 } 20 21 public void setName(String name) { 22 this.name = name; 23 } 24 25 public int getAge() { 26 return age; 27 } 28 29 public void setAge(int age) { 30 this.age = age; 31 } 32 33 @Override 34 public String toString() { 35 return "Person{" + 36 "name='" + name + '\'' + 37 ", age=" + age + 38 '}'; 39 } 40 }
Person类里面重写equals方法