Eclipse 调试 HashMap:使用 Key and Value 的 toString() 方法的逻辑结构

2022-09-02 04:58:10

在使用IntelliJ几年后,我最近开始使用Eclipse。使用 IntelliJ 调试 Map 时,如果键或对象实现 toString(),则会显示键值的字符串表示形式列表。

在 Eclipse 中,当我选择“显示逻辑结构”时,我看到类似下面的内容:

enter image description here

此视图的问题在于,您需要展开每个条目才能看到实际的键和值。如果您需要在包含10个以上元素的地图中找到某些内容,则会变得非常乏味。

我知道你可以使自定义逻辑结构和地图的默认值看起来像这样:

return entrySet().toArray();

有没有办法,无论是通过自定义逻辑结构还是插件来查看地图条目比

ConcurrentHashMap$WriteThroughEntry (id=193)

答案 1

您需要在逻辑结构之上创建一个详细信息格式化程序。在您提供的示例屏幕截图中,您的逻辑结构是 ConcurrentHashMap$WriteThroughEntry。您可以通过右键单击包含 ConcurrentHashMap$WriteThroughEntry 的行并选择“添加详细信息格式化程序”来添加详细信息格式化程序。

我刚刚使用HashMap敲了这个例子。

enter image description here

java.util.HashMap$Entry //  key + " - " + value

对于

HashMap<Integer,String> map;

..我很快就装满了垃圾,我现在看到:

enter image description here


答案 2

好吧,我做了一个丑陋的解决方法。为地图设置此详细格式化程序:

StringBuilder detail = new StringBuilder();
int i = 0;
for (Object k : keySet()) {
    detail.append((i++) + ": " + k + "\n");
}
return detail;

然后在该条目的输出中,找到具有所需键的条目的索引,然后在逻辑结构树中找到该条目。

它可以工作,但细节格式化程序本身有点慢,并且需要额外的步骤。此外,键没有排序,因此在大地图中找到所需的键可能很困难(尽管理论上可以在格式化程序中进行排序)。