【问题标题】:Split Hashtable within a Hashtable into two separate Hashtables将 Hashtable 中的 Hashtable 拆分为两个单独的 Hashtable
【发布时间】:2012-08-20 01:50:40
【问题描述】:

我是 Java 新手。我一直在使用 Hashtables 来读取具有各种键和值的不同数据。

我在 Hashtable 中有一个 Hashtable,我想将其拆分为两个 Hashtable。

Hashtable<String, Hashtable<String, Double>> sData;

想拆分成类似的东西:

Hashtable<String, Double> innerData;
Hashtable<String, String> outerData;

我什至不确定这是否可能,因为我正在使用外部 Hashtable 并将值更改为 String,而不是另一个 Hashtable。我想我还是会问的

【问题讨论】:

  • 我很难理解哪些数据应该去哪里。你能举一个你想要的例子吗?
  • 对不起,我正在尝试将内部Hashtable的键用作单独的Hashtable中的键,但也保留外部Hashtable以供以后使用。示例:
  • 是的,谢谢,我就是这么想的,只是不确定是否可行
  • 我不完全确定 outerData 应该包含什么,但如果它是从外部键到内部键的映射,则只有在内部映射只包含单个条目时才有效.此外,如果内部键与外部键有任何重叠,那么您的 innerData 映射将丢失数据。
  • 例如,如果我们想到汽车,outerData 包含一般的东西,例如汽车的“品牌”,而 innerData 包含“型号”和“价格”。理想情况下,我希望能够拉出“Model”和“Price”(key2,value),同时也保留一般的“Make”和“Model”(key,key2)

标签: java split key hashtable


【解决方案1】:
Hashtable<String, Double> innerData;
Hashtable<String, List<String>> outerData; // or use some multimap library

for(String key:sData.keys()){ 
   List<String> outerlist = new List<String>();
   for(String key2:outerData.get(key).keys()){
       outerlist.add(key2);
       innerData.put(key2,outerData.get(key).get(key2))
   }
   outerData.put(key,outerlist)
}

或者如果你想避免交叉哈希数据丢失,你需要新的类

Hashtable<Pair<String,String>, Double> innerData;
Hashtable<String, List<Pair<String,String>>> outerData;

其中 Pair 是一个代表嵌套键的类。你也可以只连接字符串,但如果你想向后工作,这会更麻烦。

【讨论】:

  • 什么?这甚至不编译;你不能只遍历Hashtable
  • outerData 不断覆盖相同的映射,因此您只会获得为给定键输入的最后一个 key2 值。你正在丢失数据。此外,如果嵌套映射中的 key2 有任何重叠,您将丢失数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-15
  • 1970-01-01
  • 2013-11-26
  • 2015-03-01
  • 2021-02-25
  • 1970-01-01
  • 2011-01-04
相关资源
最近更新 更多