`

java集合中Map的hashCode()和equals()方法重要性

阅读更多
1.HashMap使用Key对象的hashCode()和equals()方法去决定key-value对的索引。
  当我们试着从HashMap中获取值的时候,这些方法也会被用到。如果这些方法没有被正确地实现,在这种情况下,两个不同Key也许会产生相同的hashCode()和equals()输出,HashMap将会认为它们是相同的,然后覆盖它们,而非把它们存储到不同的地方。同样的,所有不允许存储重复数据的集合类都使用hashCode()和equals()去查找重复,所以正确实现它们非常重要。equals()和hashCode()的实现应该遵循以下规则:
// 1.
if(o1.equals(o2))
  return o1.hashCode() == o2.hashCode();//总是为true的。
//2.
if(o1.hashCode() == o2.hashCode())
  return o1.equals(o2)// 不意味着总会为true。


2.Map接口提供三个集合视图:
  (1)Set keyset():返回map中包含的所有key的一个Set视图。
  (2)Collection values():返回一个map中包含的所有value的一个Collection视图。
  (3)Set<Map.Entry<K,V>> entrySet():返回一个map钟包含的所有映射的一个集合视图。

3.HashMap和HashTable有何不同?
(1)HashMap允许key和value为null,而HashTable不允许。
(2)HashTable是同步的,而HashMap不是。所以HashMap适合单线程环境,HashTable适合多线程环境。
(3)在Java1.4中引入了LinkedHashMap,HashMap的一个子类,假如你想要遍历顺序,你很容易从HashMap转向LinkedHashMap,但是HashTable不是这样的,它的顺序是不可预知的。
(4)HashMap提供对key的Set进行遍历,因此它是fail-fast的,但HashTable提供对key的Enumeration进行遍历,它不支持fail-fast。
(5)HashTable被认为是个遗留的类,如果你寻求在迭代的时候修改Map,你应该使用CocurrentHashMap。
分享到:
评论

相关推荐

    java中hashCode、equals的使用方法教程

    在Java编程语言中,`hashCode()` 和 `equals()` 方法对于对象的比较和处理至关重要,尤其在集合类(如Set和Map)中。这两个方法都源自`java.lang.Object`类,因此所有的Java类都默认继承了它们。理解并正确地重写这...

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

    在Java中,equals和hashCode方法是两个非常重要的方法,它们对于确保程序的正确性和性能至关重要。在实际开发中,我们必须正确地重写这两个方法,以便于正确地比较和存储对象。同时,我们还需要注意到,重写equals...

    Java Map 集合类简介

    其中,`equals(Object o)`和`hashCode()`方法用于比较Map的等价性,确保了Map的正确比较和存储。插入和删除元素的操作由`put(Object key, Object value)`、`remove(Object key)`以及`clear()`等方法完成。`putAll...

    java中map集合的用法.doc

    Java中的Map接口是Java集合框架的重要组成部分,它用于存储键值对的数据结构。Map不同于List,List是以索引来访问元素,而Map则是通过键(key)来查找对应的值(value)。Map接口定义了一系列方法,使得我们可以对...

    实验05 Java集合.doc

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高级的数据结构,使得开发者能够更方便地管理和操作对象。在本次实验中,我们主要关注了三个主要的集合接口:Set、List和Map,以及它们的一些常见...

    java中Map映射机制

    Java中的Map映射机制是Java集合框架的重要组成部分,它提供了键值对的存储方式,使得可以通过键来查找和操作对应的值。Map接口是所有映射类的基础,它定义了多种方法来实现对键值对的操作。 Map接口的核心方法包括...

    Java集合排序及java集合类详解(Collection、List、Map、Set

    Java集合框架是Java编程语言中极其重要的一部分,它提供了存储和操作数据的高效方式。本文将深入探讨Java集合框架的四大核心组件:`Collection`、`List`、`Map`和`Set`,以及它们的排序方法。 ### 1. 集合框架概述 ...

    java 集合 分析比较

    Java集合框架(Java Collection Framework)是Java标准库中的一个重要组成部分,它提供了一系列用于存储和操作数据的接口及实现类。通过合理选择不同的集合类型,可以有效地提高程序的运行效率和可维护性。 #### 二...

    Java集合排序及java集合类详解(Collection、List、Map、Set).pdf

    - **覆写hashCode()**:为了确保键的唯一性,当使用自定义对象作为键时,需要重写equals()和hashCode()方法。 5. **Set** - Set接口不包含重复元素,且不保证元素顺序。 - **实现原理**:HashSet是最常见的Set...

    java集合课程3.docx

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了多种数据结构的实现,使得开发者能够高效地管理和操作数据。本课程主要涵盖了以下几个核心知识点: 1. **集合框架图**: - Java集合框架分为两大类...

    Java集合框架

    在使用Java集合框架时,开发者还应当注意集合中元素的equals和hashCode方法的覆盖,这两个方法的正确实现对于保证元素在集合中的唯一性至关重要。equals方法用于判断两个对象是否相等,hashCode方法则用于获取对象的...

    学习Object类——为什么要重写equeals和hashcode方法

    Object 类的 equals 和 hashCode 方法的重要性与实现 在 Java 编程语言中,Object 类是所有类的父类,但是在实际开发中,我们往往需要重写 Object 中的 equals 和 hashCode 方法,以便正确地比较对象的逻辑内容,而...

    Java源码分析:集合-容器.pdf

    为了保证元素的唯一性,存储在HashSet中的对象必须正确地覆写hashCode和equals方法。TreeSet利用二叉树的原理对元素进行排序,它可以将元素按照指定的顺序进行排序。如果需要对自定义对象进行排序,则要求该对象必须...

    java Collection&Map

    Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了数据结构和算法的抽象,使得开发者可以方便地存储和管理对象。在这个框架中,Collection和Map接口及其实现类扮演着核心角色。 1. **Collection接口**...

    Java API 免费使用集合.zip

    Java集合框架是一组接口和类的集合,它们为处理对象集合提供了一种统一的方法。这些接口和类主要位于java.util包中,包括List、Set、Map接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。集合框架使得...

    JAVA集合(List,Set,Map)

    ### JAVA集合(List, Set, Map)详解 #### 集合框架概述 Java集合框架是Java编程语言中处理数据组织的核心部分。它提供了一系列接口、抽象类和具体实现类,帮助开发者有效地管理对象集合。本篇文章将深入探讨集合框架...

Global site tag (gtag.js) - Google Analytics