`
DataBird
  • 浏览: 70690 次
  • 性别: 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;
    }
}
 
分享到:
评论

相关推荐

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

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

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

    原因是因为,在Java自带的容器HashMap和HashSet中, 都需同时要用到对象的hashCode()和equals()方法来进行判断,然后再插入删除元素,这点我们一会再谈。 那么我们还是单独来看hashCode(),为什么HashMap需要用到...

    Penglq#book-1#Hashmap的hashcode的作用等1

    1.hashcode是用来查找的,如果你学过数据结构就应该知道,在查找和排序这一章有例如内存中有这样的位置而我有个类,这个类有个字段叫ID,我要把这个类存放在以

    HashMap-面试必过

    13.HashMap为什么不直接使用hashCode()处理后的哈希值直接作为table的下标? 14.HashMap 的长度为什么是2的幂次方? 15.HashMap 与 HashTable 有什么区别? 16.如何决定使用 HashMap 还是 TreeMap? 17.HashMap 和 ...

    Java equals 方法与hashcode 方法的深入解析

    面试时经常会问起字符串比较相关的问题,比如:字符串比较时用的什么方法,内部实现如何?hashcode的作用,以及重写equal方法,为什么要重写hashcode方法?以下就为大家解答,需要的朋友可以参考下

    HashMap部分源码分析

    HashMap数据结构,HashMap的构造方法,HashMap的put,HashMap的get

    hashmap 实例

    hashmap实例 hashmap实例hashmap实例hashmap实例

    hashmap面试题_hashmap_

    hashmap相关的面试题

    HashMap介绍和使用

    HashMap介绍和使用

    HashMap原理.docx

    HashMap是一个散列桶(数组和链表),它存储的内容是键值对(key-value)映射HashMap采用了数组和链表的数据结构,能在查询和修改方便继承了数组的线性查找和链表的寻址修改HashMap是非synchronized,所以HashMap很快...

    HashMap存放.doc

    HashMap存放.doc

    hashmap实现原理

    hashmap的底层及源码解析,很适合大家的学习,不要积分。

    关于如何解决HashMap线程安全问题的介绍

    HashMap为什么是线程不安全的?如何解决HashMap的线程不安全问题?

    HashMap模块源码—— 高效随机存取数据结构 ,文本索引必备

    哈希函数用的是java中String.hashCode()算法(经实际验证其碰撞率极低且相近的文本散列值相邻,存取的效率更高.)。可自动无限增加容量(内存允许)。3、连续10万次不同内容存取效率为,存10万次共耗时约280ms ,取10万次...

    HashMap排序

    hashMap排序,hashmap使用还是比较频繁。这时自己写的一个实现hashmap排序的例子

    Javascript实现和操作HashMap

    Javascript实现和操作HashMap,压缩包里面有hashmap定义和操作的例子

    HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别.docx

    HashMap底层实现原理HashMap与HashTable区别HashMap与HashSet区别。HashMap、HashTable和HashSet是Java中常用的数据结构,它们的底层实现原理以及区别如下:HashMap底层实现原理: HashMap基于哈希表(HashTable)...

    HashMap.js

    模拟java中的HashMap类js类对象,可以与js的Array类对象配合使用

    Java SE程序 HashMap类

    Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序 HashMap类Java SE程序...

Global site tag (gtag.js) - Google Analytics