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);
    }
相关文章
|
1天前
|
存储 安全 算法
掌握Java并发编程:Lock、Condition与并发集合
掌握Java并发编程:Lock、Condition与并发集合
7 0
|
1天前
|
Java
Java一分钟之-类与对象:面向对象编程入门
【5月更文挑战第8天】本文为Java面向对象编程的入门指南,介绍了类与对象的基础概念、常见问题及规避策略。文章通过代码示例展示了如何定义类,包括访问修饰符的适当使用、构造器的设计以及方法的封装。同时,讨论了对象创建与使用时可能遇到的内存泄漏、空指针异常和数据不一致等问题,并提供了相应的解决建议。学习OOP需注重理论与实践相结合,不断编写和优化代码。
14 1
|
6天前
|
存储 安全 Java
Java集合的分类有哪些?
Java中的集合就像一个容器,专门用来存储Java对象,这些对象可以是任意的数据类型,并且长度可变。这些集合类都位于java.util包中,在使用时一定要注意导包的问题,否则会出现异常。
34 10
|
7天前
|
SQL Java 数据库连接
15:MyBatis对象关系与映射结构-Java Spring
15:MyBatis对象关系与映射结构-Java Spring
27 4
|
9天前
|
Java 开发者
Java中三种Set的实现类的用法和区别
Java中三种Set的实现类的用法和区别
|
9天前
|
安全 Java
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
|
10天前
|
Java 编译器
【Java探索之旅】解密构造方法 对象初始化的关键一步
【Java探索之旅】解密构造方法 对象初始化的关键一步
16 1
|
10天前
|
Java
Java对象和类研究
Java对象和类研究
8 0
|
11天前
|
机器学习/深度学习 人工智能 算法
java对象的比较
java对象的比较
21 0
java对象的比较
|
15天前
|
存储 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