Set集合处理两个相同内容的对象-Java

简介: Set集合处理两个相同内容的对象-Java

Set集合使用HashSet存储方法,其原理是计算目标对象的Hashcode,根据Set大小来取余后选取一个位置,如果存储在同一个位置就需要比较是不是一个相同的内容,如果是不同的就在上一个内容后面进行链接(链表或者红黑树)。

  1. 首先创建一个长度为16的数组;
  2. 根据目标的HashCode值和数组长度取余数,得到一个存储的位置;
  3. if  位置为空 :直接存入;
  4. else  使用equals方法比较:

 如果相同则不存,否则存储。

而对于两个对象尽管其内容是一样的HashCode是不一样的,equals方法计算也是不同的,则就会将这两个对象都进行存储。

对于以下示例类:
class Student{
    int Id;
    String name;
    int age;
    public Student(int Id,String name,int age){
        this.Id=Id;
        this.age=age;
        this.name=name;
    }
}

因此就需要在类里面重写HashCode和equals方法

/**
     * 重写HashCode之后,比较的就不是对象地址了
     * @return
     */
    @Override
    public int hashCode() {
        return Objects.hash(Id, name, age);
    }
/**
     * 重写equals之后比较里面元素来判断是不是等价的
     * @param o
     * @return
     */
    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return Id == student.Id && age == student.age && Objects.equals(name, student.name);
    }
相关文章
|
3天前
|
安全 Java 编译器
java中类与对象回顾总结-2
java中类与对象回顾总结
14 3
|
3天前
|
Java 编译器
java中类与对象回顾总结-1
java中类与对象回顾总结
14 3
|
2天前
|
存储 安全 Java
Java一分钟之-集合框架进阶:Set接口与HashSet
【5月更文挑战第10天】本文介绍了Java集合框架中的`Set`接口和`HashSet`类。`Set`接口继承自`Collection`,特征是不允许重复元素,顺序不确定。`HashSet`是`Set`的实现,基于哈希表,提供快速添加、删除和查找操作,但无序且非线程安全。文章讨论了`HashSet`的特性、常见问题(如元素比较规则、非唯一性和线程安全性)以及如何避免这些问题,并提供了代码示例展示基本操作和自定义对象的使用。理解这些概念和注意事项能提升代码效率和可维护性。
9 0
|
2天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
2天前
|
Java 索引
【JAVA基础篇教学】第九篇:Java中Set详解说明
【JAVA基础篇教学】第九篇:Java中Set详解说明
|
2天前
|
Java
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
【JAVA基础篇教学】第五篇:Java面向对象编程:类、对象、继承、多态
|
3天前
|
缓存 Java 程序员
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
关于创建、销毁对象⭐Java程序员需要掌握的8个编程好习惯
|
3天前
|
Java
从源码出发:JAVA中对象的比较
从源码出发:JAVA中对象的比较
12 3
|
18天前
|
存储 JavaScript 索引
js开发:请解释什么是ES6的Map和Set,以及它们与普通对象和数组的区别。
ES6引入了Map和Set数据结构。Map的键可以是任意类型且有序,与对象的字符串或符号键不同;Set存储唯一值,无重复。两者皆可迭代,支持for...of循环。Map有get、set、has、delete等方法,Set有add、delete、has方法。示例展示了Map和Set的基本操作。
21 3
|
1月前
|
存储 数据格式
Set和Map的应用场景
Set和Map的应用场景