集合——HashSet接口

set接口简述:元素无序 且 不允许有重复元素。Set接口和List接口继承自Collection接口。

     

 向HashSet存入对象时,对象一般会重写hashCode()和equals()方法。

 

 代码演示:

此时存储并输出了两个一样的。因为没有重写hashCold()和equal()方法。

复制代码
import java.util.HashSet;
import java.util.Iterator;

public class HashSetDemo {
    public static void main(String[] args) {
        //创建HashSet对象
        HashSet hs=new HashSet();
        //给集合中添加自定义对象.
        hs.add(new Student("李白",21));
        hs.add(new Student("杜甫",19));
        hs.add(new Student("张飞",22));
        hs.add(new Student("李白",21));//存储了两个“李白”
        //取出集合中的每个元素
        Iterator it=hs.iterator();
        while (it.hasNext()){
            Student s=(Student)it.next();
            System.out.println(s);
        }

学生类:
public class Student {
    private String name;
private int age;

public Student(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override //重写String方法,利于输出完整的String量。ALT+insert键选择to String
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
//此时从上到这,没有重写hashCold()和equal()方法。所以HashSet集合可以存储一样的元素
  
此时输出:

Student{name='李白', age=21}
Student{name='张飞', age=22}
Student{name='杜甫', age=19}
Student{name='李白', age=21}   //此时存储并输出了两个一样的。元素重复了

///////////////////////////////////////////////////////////////////////////////////////////

  @Override  //ALT+insert键选择 hashCold()和equal(),直接默认下一步就行了。
  public boolean equals(Object o) {
   if (this == o) return true;
  if (o == null || getClass() != o.getClass()) return false;
   Student student = (Student) o;
  return age == student.age &&
Objects.equals(name, student.name);
  }

  @Override    
  public int hashCode() {
  return Objects.hash(name, age);
  }

//此时到这,以经重写hashCold()和equal()方法。
此时输出:

E:\Files\java11\bin\java.exe "-javaagent:E:\Files\Idea\IntelliJ IDEA 2018.2.2\lib\idea_rt.jar=57273:E:\Files\Idea\IntelliJ IDEA 2018.2.2\bin" -Dfile.encoding=UTF-8 -classpath E:\Files\Idea\javacold\out\production\demo01 com.libai.www.HashSetDemo
Student{name='李白', age=21}
Student{name='杜甫', age=19}
Student{name='张飞', age=22}  //李白这个元素此时不能重复

Process finished with exit code 0

   }
}

复制代码

 

null
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· 因为Apifox不支持离线,我果断选择了Apipost!
点击右上角即可分享
微信分享提示