Java IntelliJIdea:HashMap调试窗口不';不显示与链表相关的全部详细信息
我的简单java代码如下所示:Java IntelliJIdea:HashMap调试窗口不';不显示与链表相关的全部详细信息,java,intellij-idea,Java,Intellij Idea,我的简单java代码如下所示: String s1 = "FB"; String s2 = "Ea"; System.out.println(s1.hashCode() == s2.hashCode()); // true Map<String, Integer> map = new HashMap<>(); map.put(s1, 1); map.put(s2, 2); String s1=“FB”; 字符串s2=“Ea”; System.out.print
String s1 = "FB";
String s2 = "Ea";
System.out.println(s1.hashCode() == s2.hashCode()); // true
Map<String, Integer> map = new HashMap<>();
map.put(s1, 1);
map.put(s2, 2);
String s1=“FB”;
字符串s2=“Ea”;
System.out.println(s1.hashCode()==s2.hashCode());//真的
Map Map=newhashmap();
图.put(s1,1);
地图放置(s2,2);
在IntelliJIdea中调试这段代码时,我无法看到由HashMap数据结构创建的链表,而且它正在创建两个bucket,而不是一个,尽管hashcode对于
s1
和s2
是相同的。请您澄清一下这一点好吗?默认情况下IDEA简化了地图视图。要查看所有内部字段,您需要在map对象上单击鼠标右键,然后查看为->对象,然后对HashMap$Node
对象执行相同操作
关于表
大小,默认情况下它有16个存储桶:
java.util.HashMap#DEFAULT_INITIAL_CAPACITY=1您需要做三件事。
这不是直截了当的,我花了一段时间才弄明白,因为以前没有人回答过
如果选中该值,则需要取消选中该值。要打开该窗口,您需要在调试器内单击鼠标右键,然后选择“自定义数据视图…”
现在您应该看到该表中的列表
其次,您需要右键单击要查看其上下一个节点的节点,并选择“新建类级别监视”
右键单击该节点并选择putMapEntries();
如您所见,FB的下一个值是Ea
我希望这有帮助。HashMap是否使用链表方法处理冲突?我认为它在Java8和更新版本中使用了开放寻址,并回退到树结构?你看到了什么可观察到的行为?@DanielPryden在某些情况下,它会切换到一棵树,但首先是一个链表。我仍然无法在对象视图中看到散列和下一个值。我正在使用IntelliJIdea Community 2018.1版本。是否可以在默认情况下将地图显示为对象,而无需右键单击它@阿尔曼, 是的,在设置
|生成、执行、部署
|调试器
|数据视图
|Java
中,需要取消选中为集合类启用备用视图
您还需要取消选择“为集合类启用备用视图”。