Java HashSet集合存储遍历学生对象代码实例


由于Set集合是不存储重复元素的,所以在做此案例时,如果我正常添加一个重复元素是什么结果呢?

public class HashSetDemo {
  public static void main(String[] args) {
    //创建HashSet集合对象
    HashSet<Student> hashSet = new HashSet<Student>();

    //创建学生对象
    Student s1 = new Student("爱学习", 21);
    Student s2 = new Student("爱Java", 22);
    Student s3 = new Student("坚持不懈", 23);

    Student s4 = new Student("爱Java", 22);

    //把学生添加到集合
    hashSet.add(s1);
    hashSet.add(s2);
    hashSet.add(s3);
    hashSet.add(s4);

    //遍历集合(增强for循环)
    for (Student s : hashSet) {
      System.out.println(s.getName() + "," + s.getAge());
    }
  }
}

运行结果:

通过运行结果,我们发现,重复的元素仍然被添加进去,是什么原因呢? 根据源码分析和HashSet底层数据结构可以知道,如果两个对象的哈希值相同(hashCode方法),并且对象的内容也相同(equals方法),是不会存储在哈希表的。所以我们需要在被存储的对象类中重写hashCode方法和equals方法,来解决添加了重复元素的问题。

在对象类中重写hashCode方法和equals方法后(自动生成即可)运行上面的代码,运行结果:

可见,重复的元素未被添加到集合。


最新2020整理收集的一些高频面试题(都整理成文档),有很多干货,包含mysql,netty,spring,线程,spring cloud、jvm、源码、算法等详细讲解,也有详细的学习规划图,面试题整理等,需要获取这些内容的朋友请加Q君样:11604713672

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容