`
DataBird
  • 浏览: 71734 次
  • 性别: Icon_minigender_1
  • 来自: 湖南长沙
社区版块
存档分类
最新评论

HashMap containsKey toString equals hashCode

 
阅读更多
HashMap containsKey toString equals hashCode
HashMap的key一般是自定义类,一定要重载toString、equals和hashCode方法,
这样才能使用HashMap.containsKey()方法判断是否包含该该键值,否则永远都是假!
这里要巧妙利用重载toString方法,来提供自定义类的唯一标识。

RecordNumber是自定义类,由3个字段组成,如果这3个字段都相同,就认为该类实例相同,
toString方法非常容易构造这种这个条件。

//如果 Main.hmMyDB 包含 Main.hmDS.keySet(),就不需要动作,不含就动作
System.out.println("需要压栈的任务是");
for (RecordNumber v_rn : Main.hmDS.keySet()) {
    if (!Main.hmMyDB.containsKey(v_rn)) {
        Main.taskStack.add(v_rn);
        System.out.println("压栈"+v_rn);
    } else {
        System.out.println("MyDB已经包含");
    }
}
       
  public boolean equals(Object O) {
    return (O instanceof MyClass) &&
      toString().equals(((MyClass)O).toString());
  }
 
//数据源 表名 时间 (记录数量)
public class RecordNumber {

    public final String DataSource;
    public final String TableName;
    public final Date DateTime;

    public RecordNumber(String DataSource, String TableName, Date DateTime) {
        this.DataSource = DataSource;
        this.TableName = TableName;
        this.DateTime = DateTime;
    }

    @Override
    public String toString() {
        return (this.DataSource + "**" + this.TableName + "**" + this.DateTime);
    }


    @Override
    public boolean equals(Object o) {
        return (o instanceof RecordNumber)
                && toString().equals(((RecordNumber) o).toString());
    }

    @Override
    public int hashCode() {
        int hash = 7;
        hash = 37 * hash + (this.DataSource != null ? this.DataSource.hashCode() : 0);
        hash = 37 * hash + (this.TableName != null ? this.TableName.hashCode() : 0);
        hash = 37 * hash + (this.DateTime != null ? this.DateTime.hashCode() : 0);
        return hash;
    }
}
 
分享到:
评论

相关推荐

    equals,hashcode,toString

    在Java编程语言中,`equals()`, `hashCode()` 和 `toString()` 是三个非常重要的方法,它们主要用于对象的比较、哈希存储以及打印对象信息。这三个方法是Java对象的基础特性,对于理解和开发高质量的Java程序至关...

    重写equals和hashcode方法_equals_重写equals和hashcode方法_

    在使用Java集合类时,如HashSet或HashMap,`equals()` 和 `hashCode()` 的一致性非常重要。如果你只重写了 `equals()` 而不重写 `hashCode()`,可能会导致无法正确地将对象添加到集合或从集合中查找对象。例如,在...

    java 基础之(equals hashcode)

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是两个非常重要的概念,尤其是在处理对象比较和哈希表(如 `HashMap` 和 `HashSet`)时。`equals()` 方法用于判断两个对象是否相等,而 `hashCode()` 方法则用于...

    equals与hashCode在实际开发中的重写写法

    在使用 `HashSet`、`HashMap` 等数据结构时,如果重写了 `equals()` 方法但没有重写 `hashCode()` 方法,可能会导致预期的行为不一致。因为这些数据结构依赖于 `hashCode()` 来确定对象的存储位置,而 `equals()` 来...

    equals与hashCode方法讲解

    equals 与 hashCode 方法讲解 equals 方法和 hashCode 方法是 Java 语言中两个重要的方法,它们都是在 Object 类中定义的。equals 方法用于比较两个对象是否相等,而 hashCode 方法用于返回对象的哈希码。 在 Java...

    Java理论与实践:hashCode()和equals()方法

    本文介绍了Java语言不直接支持关联数组,可以使用任何对象作为一个索引的数组,但在根Object类中使用 hashCode()方法明确表示期望广泛使用HashMap。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式...

    HashCode相同equals不同的2位字符集合算法

    在Java编程语言中,`hashCode()` 和 `equals()` 是两个非常重要的方法,它们主要用于对象的比较和哈希表(如HashMap)的操作。标题提到的"HashCode相同equals不同的2位字符集合算法"涉及到的是一个特定场景:两个...

    equals 和 hashCode两者效果分析详解.docx

    在Java编程语言中,`equals()`和`hashCode()`方法是两个非常重要的概念,尤其是在处理对象比较和容器(如HashMap和HashSet)操作时。这两个方法在Java的类库中有着核心地位,尤其是对于类实例的比较和存储。接下来,...

    关于重写equals,hashcode以及compareTo方法!

    例如,在Hashtable、HashMap、HashSet、LinkedHashMap等容器中,我们需要重写hashcode()方法,使其生成对象的哈希码,以便于快速地查找和比较对象。 compareTo()方法是Comparable接口中的一个方法,它用于比较两个...

    Java_重写equals()和hashCode()

    在Java编程语言中,`equals()` 和 `hashCode()` 方法是对象的基本组成部分,它们在很多场景下都发挥着至关重要的作用。这两个方法与对象的相等性比较和哈希表(如HashMap、HashSet)的运作紧密相关。这篇博客将深入...

    Java容器集合(equals 和 hashCode+基础数据结构+ArrayList+Vector和LinkedList)

    hashCode方法的实现是非常重要的,因为它直接影响了基于Hash实现的集合的性能,如HashMap、HashSet等。这些集合需要用到对象的hash值来参与计算定位。 例如,在String类中hashCode方法的实现如下所示: public int...

    Java重写equals及hashcode方法流程解析

    "Java重写equals及hashcode方法流程解析" Java中的equals和hashCode方法是两个非常重要的方法,它们都是Object类中的方法。在实际开发中,正确地重写这两个方法对于确保程序的正确性和性能至关重要。下面,我们将...

    Java中的equals和hashCode方法详解1

    `hashCode()`方法则返回对象的一个整数值,这个值用于在基于哈希表的数据结构(如`HashSet`、`HashMap`等)中定位对象。哈希码的目的是快速定位对象,通过计算对象的哈希码,可以将对象映射到一个桶或者存储区域,...

    关于Object中equals方法和hashCode方法判断的分析

    "关于Object中equals方法和hashCode方法判断的分析" 在 Java 中,Object 类提供了两个重要的方法:equals 方法和 hashCode 方法。这两个方法都是用于比较两个对象是否相等的,但它们的实现机理和作用域却有所不同。...

    hashcode()和equals()

    在Java编程语言中,`hashCode()` 和 `equals()` 方法是两个非常重要的概念,尤其是在处理对象比较和哈希表(如 `HashMap` 或 `HashSet`)时。这两个方法来源于 `Object` 类,是所有Java类的基类,因此,每个自定义类...

    java HashMap原理分析

    为了解决这些问题,HashMap需要重写hashCode和equals方法,以确保两个不同的Key具有不同的哈希码和equals结果。同时,HashMap也需要处理哈希碰撞问题,例如使用链表来存储发生哈希碰撞的Key-Value对。 HashMap是一...

    java中hashcode()和equals()方法详解

    为了确保集合类如`HashSet`和`HashMap`的正确行为,`hashCode()`和`equals()`之间必须满足以下条件: - 如果`equals()`方法判定两个对象相等,则这两个对象的`hashCode()`值必须相同。 - 相反,如果两个对象的`...

    解析Java对象的equals()和hashCode()的使用

    深入解析Java对象的equals()和hashCode()的使用 在Java语言中,equals()和hashCode()两个函数的使用是紧密配合的,你要是自己设计其中一个,就要设计另外一个。在多数情况下,这两个函数是不用考虑的,直接使用它们...

    重写hashCode()和equals()方法详细介绍

    在Java编程中,`equals()` 和 `hashCode()` 方法是Object类中的两个重要方法,它们在处理对象相等性以及在哈希表(如HashSet、HashMap)中起到关键作用。当自定义类时,有时需要根据业务逻辑重写这两个方法以满足...

Global site tag (gtag.js) - Google Analytics