在Java中向HashMap添加空键或值有什么用?

sub*_*his 87 java null key hashmap

HashMap允许一个空键和任意数量的空值.有什么用?

Mic*_*zek 124

我不是肯定你在问什么,但如果你正在寻找一个人们想要使用空键的例子,我经常在地图中使用它们来表示默认情况(即应该使用的值)如果给定的密钥不存在):

Map<A, B> foo;
A search;
B val = foo.containsKey(search) ? foo.get(search) : foo.get(null);
Run Code Online (Sandbox Code Playgroud)

HashMap特别处理null键(因为它不能调用.hashCode()null对象),但null值不是特别的,它们像其他任何东西一样存储在地图中

  • @Pacerier在`HashMap`(`putForNullKey`)中有一个处理它的特殊方法; 它将它存储在表0中 (26认同)
  • @ dheeraj92如果密钥不存在,您的代码会将`val`设置为`null`; 我将它设置为地图中的"null"映射.这就是重点,我在地图中的`null`键上存储了一个默认的非空值,如果实际的键不存在则使用它 (6认同)
  • 因此,如果null不能使用.hashCode(),那么谁决定null键将进入哪个转移? (4认同)

小智 28

一个例子是树木建模.如果使用HashMap表示树结构,其中键是父结构,值是子列表,则null键的值将是根节点.


小智 6

null 的使用的一个示例是当使用a HashMap作为高速缓存以用于可能返回的昂贵操作(诸如对外部web服务的调用)的结果时null.

null在地图中放置一个值,然后您可以区分未对给定键执行操作的情况(cache.containsKey(someKey)返回false),以及已执行操作但返回null值(cache.containsKey(someKey)返回true,cache.get(someKey)返回null)的情况.

如果没有null值,则必须在缓存中放置一些特殊值来指示null响应,或者根本不缓存该响应并且每次都执行操作.