当前位置: 首页 > 面试题库 >

具有Null键和Null值的HashMap

方斌
2023-03-14
问题内容

考虑以下代码:

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, and null,键如何相互关联。是否所有三个都分配给相同的哈希码?如果是,为什么?

由于这三个值看起来都不同,因此一个值的更改会更改另一个值。这是否意味着只将一个密钥项输入HashMap 到任一密钥中,e1, e2, or null因为所有密钥项都被视为相同的密钥。


问题答案:

HashMap 当将 null 作为键传递并且null作为特殊情况处理时,不会调用哈希码。

放置方法

HashMapnull 键放在存储区 0中, 并将 null
作为键映射到传递的值。HashMap通过链表数据结构来实现。HashMap在内部使用链接列表数据结构。

HashMap (中的静态类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方法中传递的值。

获取方法

Hashmap get方法中,检查key是否作为 null 传递。存储区 0 中空 键的搜索值。 __

因此,在一个中只能有一个空键 __hashmap 目的。



 类似资料:
  • 问题内容: 这个问题需要一些假设的背景。让我们考虑一个有列的表,,,,使用MySQL作为RDBMS。由于如果给定的某个人的名字和出生日期与另一个人相同,那么根据定义,他们就是同一个人(除非有两个巧合,即我们两个人分别于1809年2月12日出生,他们叫亚伯拉罕·林肯),所以我们将上的唯一键,这意味着“不要将同一个人存储两次”。现在考虑以下数据: 如果现在尝试运行以下语句,则该语句应该并且将失败: 如

  • NULL 值代表遗漏的未知数据。 默认地,表的列可以存放 NULL 值。 本章讲解 IS NULL 和 IS NOT NULL 操作符。 SQL NULL 值 如果表中的某个列是可选的,那么我们可以在不向该列添加值的情况下插入新记录或更新已有的记录。这意味着该字段将以 NULL 值保存。 NULL 值的处理方式与其他值不同。 NULL 用作未知的或不适用的值的占位符。 注释:无法比较 NULL 和

  • 问题内容: 为什么第一个INSERT要通过table2。请注意,table2.col_1不为NULL。它不会为col_1插入NULL,而是神秘地将NULL值转换为空字符串。我正在使用MySQL 5.5.28版本。谢谢 问题答案: 您已关闭MySQL的STRICT模式。打开它,您将得到一个错误。 否则,您可以通过以下方式使用PDO测试这些警告:http : //php.net/manual/en/p

  • 我有一个表,其中有几个列组成了主键。存储的数据的性质允许其中一些字段具有值。我把桌子设计成这样: 但是,当我运行时,它显示如下: 在插入值时,我一直收到错误。 列“Field2”不能为空 这是因为作为主键一部分的字段不能为空吗?除了对< code>NULL使用“0”之外,我还有什么选择?

  • 和此映射器(使用Mapstruct): 当我有一个带有空条的MyFoo实例并尝试将其映射到proto时,我会得到一个NullPointerException。 这是因为映射器的自动生成代码为proto调用了一个自动生成的方法,该方法如下所示:

  • 问题内容: 之间有什么区别 和 为何后者不起作用? 问题答案: 在SQL中,之间的比较值,任何其他值(包括另一种使用比较操作符(如),,,等)将导致,这被认为是一个where子句的目的(严格来说,它的“不true”,而不是“false”,但效果相同)。 原因是a的意思是“未知”,因此与a进行任何比较的结果也都是“未知”。因此,通过编码您不会对行造成任何影响。 SQL提供了一种特殊的语法来测试列是否