欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中IdentityHashMap與HashMap區(qū)別詳解

 更新時(shí)間:2023年11月09日 10:34:12   作者:pony-zi  
這篇文章主要介紹了Java中IdentityHashMap與HashMap區(qū)別詳解,很多人不曉得IdentityHashMap的存在,其中不乏工作很多年的Java開發(fā)者,他們看到就說是第三方j(luò)ar包,實(shí)際上它是Jdk源碼自帶的集合類,需要的朋友可以參考下

IdentityHashMap與HashMap區(qū)別

你真的了解IdentityHashMap與HashMap區(qū)別嗎?

很多人不曉得IdentityHashMap的存在,其中不乏工作很多年的Java開發(fā)者,他們看到就說是第三方j(luò)ar包,實(shí)際上它是Jdk源碼自帶的集合類。

那它們有何區(qū)別呢? 趣答:

穿同樣顏色衣服的雙胞胎(HashMap)

穿不同顏色雙胞胎弟弟(IdentityHashMap)

HashMap

對(duì)于常用的HashMap來說,我們都知道只要key的值相同(嚴(yán)謹(jǐn)說法是:key.equals(k)) 那么我們認(rèn)為他們是同一個(gè)可以Entry。如果我們把顏色作為研究對(duì)象:key值,那么我們就得出雙胞胎兄弟的顏色一致,key.equals(k)=true,他們是同一個(gè)人(臉盲癥)。

JDK源碼:

if (e.hash == hash && ((k = e.key) == key || key.equals(k))) 

IdentityHashMap

而對(duì)于IdentityHashMap則不同,他是非分明,他只承認(rèn)key==e.key的結(jié)果為true時(shí),才認(rèn)為是相同的Entry。不管雙胞胎弟弟今天穿綠色,明天穿藍(lán)色,他都認(rèn)為你是同一個(gè)人,不會(huì)“臉盲”。

 if (item == k) 

代碼舉例

package com.scc;
import java.awt.Color;
/**
 * 雙胞兄弟
 */
public class Twins
{
    /**
     * 衣服顏色
     */
    private Color color;
    public Twins(Color color)
    {
        this.color = color;
    }
    @Override
    public boolean equals(Object o)
    {
        if (o == this)
            return true;
        if (!(o instanceof Twins))
        {
            return false;
        }
        Twins user = (Twins)o;
        return color.equals(user.color);
    }
    @Override
    public int hashCode()
    {
        int result = 17;
        result = 31 * result + color.hashCode();
        return result;
    }
    public void setColor(Color color)
    {
        this.color = color;
    }
}
package com.scc;
import java.awt.Color;
import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Map;
public class MainTest
{
    public static void main(String[] args)
    {
        Map<Twins, String> hashMap = new HashMap<Twins, String>();
        Map<Twins, String> identityMap = new IdentityHashMap<Twins, String>();
        // 兄弟
        Twins brother = new Twins(Color.green);
        // 哥哥
        Twins eldBrother = new Twins(Color.green);
        hashMap.put(brother, "弟弟");
        hashMap.put(eldBrother, "哥哥");
        System.out.println(hashMap);//{com.scc.Twins@ff01010f=哥哥} 結(jié)果卻只有哥哥
        identityMap.put(brother, "綠色衣服的弟弟");
        //第二天弟弟換了一身藍(lán)衣服
        brother.setColor(Color.BLUE);
        identityMap.put(brother, "藍(lán)色衣服的弟弟");
        System.out.println(identityMap);//{com.scc.Twins@ff00030e=藍(lán)色衣服的弟弟} 結(jié)果弟弟還是弟弟,只是顏色不同罷了
    }
}

到此這篇關(guān)于Java中IdentityHashMap與HashMap區(qū)別詳解的文章就介紹到這了,更多相關(guān)IdentityHashMap與HashMap區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot整合SpringSecurity實(shí)現(xiàn)認(rèn)證攔截的教程

    SpringBoot整合SpringSecurity實(shí)現(xiàn)認(rèn)證攔截的教程

    我們寫的任何一個(gè)項(xiàng)目,都應(yīng)該有安全防護(hù),不應(yīng)該讓這個(gè)項(xiàng)目進(jìn)行“裸奔”,否則很容易被別人進(jìn)行攻擊。而在SpringBoot環(huán)境中,其實(shí)可以很容易實(shí)現(xiàn)安全保護(hù),本文給大家介紹SpringBoot如何整合SpringSecurity實(shí)現(xiàn)認(rèn)證攔截,需要的朋友可以參考下
    2023-05-05
  • springboot頁面國(guó)際化配置指南

    springboot頁面國(guó)際化配置指南

    聽起來高大上的國(guó)際化,起始就是在利用瀏覽器語言,或者頁面中的中英文切換,將頁面的文字在其他語言和中文進(jìn)行切換,這篇文章主要給大家介紹了關(guān)于springboot頁面國(guó)際化配置的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • Android?Studio?中Gradle配置sonarqube插件(推薦)

    Android?Studio?中Gradle配置sonarqube插件(推薦)

    Sonarqube作為一個(gè)很實(shí)用的靜態(tài)代碼分析工具,在很多項(xiàng)目中都使用,本文重點(diǎn)給大家介紹Android?Studio?中Gradle配置sonarqube插件的相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧
    2022-03-03
  • Spring IOC控制反轉(zhuǎn)的實(shí)現(xiàn)解析

    Spring IOC控制反轉(zhuǎn)的實(shí)現(xiàn)解析

    這篇文章主要介紹了Spring IOC控制反轉(zhuǎn)的實(shí)現(xiàn),IOC是Spring的核心思想之一,它通過將對(duì)象的創(chuàng)建、依賴注入和生命周期管理交給容器來實(shí)現(xiàn)解耦,使開發(fā)者能夠更專注于業(yè)務(wù)邏輯的實(shí)現(xiàn),需要的朋友可以參考下
    2025-02-02
  • 解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system的異常問題

    解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system

    今天小編就為大家分享一篇關(guān)于解決Eclipse/STS中出現(xiàn)Resource is out of sync with the file system的異常問題,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • SpringBoot操作Redis三種方案全解析

    SpringBoot操作Redis三種方案全解析

    這篇文章主要介紹了SpringBoot操作Redis三種方案全解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java并發(fā)之ReentrantLock類源碼解析

    Java并發(fā)之ReentrantLock類源碼解析

    這篇文章主要為大家詳細(xì)介紹了Java并發(fā)系列之ReentrantLock源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 如何讓Jackson JSON生成的數(shù)據(jù)包含的中文以u(píng)nicode方式編碼

    如何讓Jackson JSON生成的數(shù)據(jù)包含的中文以u(píng)nicode方式編碼

    這篇文章主要介紹了如何讓Jackson JSON生成的數(shù)據(jù)包含的中文以u(píng)nicode方式編碼。需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2013-12-12
  • SpringBoot項(xiàng)目的logback日志配置(包括打印mybatis的sql語句)

    SpringBoot項(xiàng)目的logback日志配置(包括打印mybatis的sql語句)

    這篇文章主要介紹了SpringBoot項(xiàng)目的logback日志配置(包括打印mybatis的sql語句),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java二分查找算法實(shí)現(xiàn)代碼實(shí)例

    Java二分查找算法實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了Java二分查找算法實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-11-11

最新評(píng)論