获取Map的最后一个EntrySet

3
我需要获取地图的最后一个entry set。
但我的地图有这个参数:

HashMap<Integer, HashMap<String, HashMap<Integer, Object>>> map = new HashMap<Integer, HashMap<String,HashMap<Integer,Object>>>(); 

给定以下示例:
如果我有一个带有以下类型值的地图:
{1=  
   ANIMALS=
    {1=
        {1=
            {field1=dog,field2=cat}, 
            1=
                {1=
                    {1=
                        {field1=bird,field2=horse}}, 
                2=
                    {1=
                        {field1=snake,field2=cow}}}}

我考虑使用 instanceOf,但我对它不是很熟悉。 每个映射可以包含另一个映射。这就是为什么我使用了 Object我该如何获取 Object 的最后一个 entryset?
我的输出应该是:
{1=
   {field1=dog,field2=cat}, 
{2=
   {field1=bird,field2=horse},
{3=
   {field1=snake,field2=cow}

最后的地图将会是:
HashMap<Integer,HashMap<String,String>>

任何帮助都将不胜感激。
谢谢。

9
这很可怕。你到底为什么需要这个? - Dave
2
也许你应该先使用 List 来处理 Integer->??? 的映射? - James Clark
1
@Dave - 我的天啊!*茶杯里的单片眼镜掉了* - Paul Bellora
我必须同意之前评论者的观点,也许你应该重新考虑一下这个程序的设计。 - Kevin
使用另一种更适合您的问题的数据结构... - Matjaz Muhic
"last"是什么意思?HashMap没有任何顺序概念。 - user949300
1个回答

1

如果您使用递归数据结构,则需要递归算法。

编写一个简单的递归函数,一旦类型为map.get(key)的类型不是哈希映射,您就知道已经到达树的底部。

但正如某人所说(Knuth?)-不要设计算法,而要设计数据结构。对于您来说,似乎树修改可以发挥作用。然后,您可以应用广度优先搜索并找到所有叶节点。实际上,这个哈希映射的哈希映射的哈希映射实际上是一棵树,但因为您没有在HashMap / Value之上使用任何接口,所以强制在Object上使用强制转换(它仍然可以,只是不是正确的面向对象编程方式)。

您可以自己在维基百科上找到许多示例树结构/算法(甚至是Java),因此我在此处不插入链接。

如果需要初始代码的任何帮助,请告诉我。

干杯


嗨,是的,我使用了递归方法来获取对象,并且我还修改了我的数据结构。谢谢大家.. :D - lenne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接