具有空键和空值的 HashMap [英] HashMap with Null Key and Null Value

查看:35
本文介绍了具有空键和空值的 HashMap的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

考虑以下代码:

import java.util.*;

class Employee {

    String name;

    public Employee(String nm) {
        this.name=nm;
    }
}

public class HashMapKeyNullValue {

    Employee e1;

    public void display(){

        Employee e2=null;
        Map map=new HashMap();

        map.put(e2, "25");
        System.out.println("Getting the Value When e2 is set as KEY");
        System.out.println("e2 : "+map.get(e2));
        System.out.println("e1 : "+map.get(e1));
        System.out.println("null : "+map.get(null));

        map.put(e1, "");
        System.out.println("Getting the Value when e1 is set as KEY");
        System.out.println("e2 : "+map.get(e2));
        System.out.println("e1 : "+map.get(e1));
        System.out.println("null : "+map.get(null));

        map.put(null, null);   // null as key and null as value
        System.out.println("Getting the Value when setting null as KEY and null as value");
        System.out.println("e2 : "+map.get(e2));
        System.out.println("e1 : "+map.get(e1));
        System.out.println("null : "+map.get(null));

        map.put(null, "30");
        System.out.println("Getting the Value when setting only null as KEY");
        System.out.println("e2 : "+map.get(e2));
        System.out.println("e1 : "+map.get(e1));
        System.out.println("null : "+map.get(null));
    }

    public static void main(String[] args) {

        new HashMapKeyNullValue().display();

    }
}

程序的输出是:

Getting the Value When e2 is set as KEY
e2 : 25
e1 : 25
null : 25
Getting the Value when e1 is set as KEY
e2 : 
e1 : 
null : 
Getting the Value when setting null as KEY and null as value
e2 : null
e1 : null
null : null
Getting the Value when setting only null as KEY
e2 : 30
e1 : 30
null : 30

这里 e1、e2 和 null 作为键是如何相互关联的.所有三个都分配给相同的哈希码吗?如果是,为什么?

Here how e1, e2, and null as keys are related to each other. Is all three are assigned to same hashcode ? If yes, WHY ?

由于所有三个看起来不同,一个值的变化会改变另一个.这是否意味着只有一个 key 条目被放入 HashMap 或者 e1、e2 或 null 中,因为它们都被视为同一个键.

Since all three seems to be look different the change in one value changes the other. Does it mean that only one entry for key is being made into HashMap either e1, e2, or null beacause all treated to be like the same key.

推荐答案

HashMap null 时不调用 hashcodeem> 作为 key 传递,null Key 作为特殊情况处理.

HashMap does not call hashcode when null is passed as key and null Key is handled as special case.

HashMapnull 键放入存储桶 0 并映射 null 作为传递值的键.HashMap 通过链表数据结构来实现.HashMap 内部使用链表数据结构.

HashMap puts null key in bucket 0 and maps null as key to passed value. HashMap does it by linked list data structure. HashMap uses linked list data structure internally.

HashMap(HashMap.java 中的一个静态类)使用的链表数据结构

Linked list data structure used by HashMap (a static class in HashMap.java)

static class Entry<K,V> implements Map.Entry<K,V> {
        final K key;
        V value;
        Entry<K,V> next;
        final int hash;
}

在 Entry 类中,K 设置为 null 并且值映射到在 put 方法中传递的值.

In Entry class the K is set to null and value mapped to value passed in put method.

Hashmap 的 get 方法中,检查键是否作为 null 传递.在存储桶 0 中搜索 null 键的值.

While in Hashmap get method the checks if key is passed as null. Search Value for null key in bucket 0.

因此在一个hashmap对象中只能有一个空键.

Hence there can only be one null key in one hashmap object.

这篇关于具有空键和空值的 HashMap的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆