大家好!
我尝试调试TreeSet<String>
/ TreeMap<String>
,但是发现调试器由于某种原因不想让我看到parent
和left
/ right
的孩子的节点。
我希望看到嵌套的节点,但是只显示键/值。
当然,如果我评估this.left
/ this.right
,它将给我孩子。
是IDEA错误吗?为什么只显示键和值?
我还注意到,当我们从客户端代码中获取元素时,我们收到的是String
而不是TreeMap.Entry
。为了在客户代码中获得当前项目的parent
/ left
/ right
,我们应该怎么做?
答案 0 :(得分:3)
您使用的是TreeMap
,因此您具有键/值,并且按键对它进行排序,就好像所有键都在TreeSet
中一样,而TreeSet
并不引用二进制
parent
|
node
/ \
left right
TreeSet
是遵循ordered set
或natural order
的规则的custom comparator
TreeSet Documentation:基于TreeMap的NavigableSet实现。元素使用其自然顺序进行排序,或通过在设置创建时提供的Comparator进行排序,具体取决于所使用的构造器。
所以TreeMap
就是TreeSet
,您只需在其中向每个键添加一个值
答案 1 :(得分:0)
某些IDE可以选择以更“友好”的方式显示集合的内容,而不是显示集合的内部数据结构。之所以这样,是因为大多数程序员都是使用集合,而不是调试,因此看到集合的内部结构会模糊集合的内容。
在NetBeans中,可以通过以下方法来更改此选项:转到Java> Java Debugger类别中的Preferences,并设置各种“格式化程序”,例如Collection,Map和Map.Entry。
在IntelliJ IDEA中,打开“设置”对话框,然后在“构建,执行,部署->调试器->数据视图-> Java”下查看。该选项称为“为Collections类启用替代视图”。 (谢谢,马特·莱德霍尔姆!)
关于问题的第二部分,如果您使用的是TreeMap<K, V>
,则API仅公开您正在使用的类型K
和V
。 TreeMap.Entry
结构是内部数据结构,对客户端不公开。客户端本身无法导航树结构(左/右/父)。 TreeMap
的目的不是公开树结构,而是提供公开了键和值(按键排序)的映射的抽象。
您可以通过调用Map.Entry
获得entrySet()
引用。这些是对实际TreeMap.Entry
对象的引用。但是,Map.Entry
不会显示左/右/父母。它只公开键和值。