我需要一个双表,从中我可以从键或索引中获取两个值。我已经看到了this的问题,我想知道考虑到性能还有什么更好的方法。
1)以这种方式创建一个HashMap:
HashMap<Integer, HashMap<String, String>> = ...;
我不知道如何在put方法中放置值,我有这个,Eclipse给了我一个错误prueba.put(0, new Hashtable<"Hi", "Bye">);
正如你所看到的,我从来没有使用过这样的东西,我确信它是一个简单的问题
2)以这种方式创建一个HashMap:
HashMap<Integer, YourFancyDatatype>
所以我创建了一个类,它将我希望在一个Object中包含的两个或多个值打包在一个键或索引中。
哪个表现更好?另外,如果你可以帮助我如何使用数字1)方法。 HashMap将有大约20000个条目。
非常感谢您的时间和帮助:)
答案 0 :(得分:3)
您需要具有单个键和值集合的内容。我建议使用Apache's MultiMap,因为他们已经为您实现了此功能。
答案 1 :(得分:1)
您的第一种方法使用与番石榴HashBasedTable提供的相同数据结构,因此您可以使用它。
但如果你想获得最佳性能,你可以尝试使用基于数组的东西(例如Guava的ArrayTable)
无论如何,我建议进行一些简单的性能测试,以检查哪种解决方案表现更好。
答案 2 :(得分:0)
你想做一个“内联”放,你可以这样做:
prueba.put(0, new HashMap<String, String>() {{put("Hi", "Bye");}});
它使用了一个HashMap的匿名子类,它有一个加载值的实例块。
请注意,这将为JVM创建一个额外的类(称为MyClass $ 1或类似)。
答案 3 :(得分:0)
我不知道如何在put方法中放置值,我有这个 和Eclipse给了我一个错误prueba.put(0,new Hashtable&lt;“Hi”, “再见” &GT);正如你所看到的,在我之前我从未使用过类似的东西 我确定这是一个简单的问题。
首先,Hashtable<String, String>
不是HashMap<String,String>
的子类型。您的HashMap需要HashMap<String, String>
作为值。要么将hashmap插入值,要么将hashmap声明更改为:
HashMap<Integer, ? extends Map<String, String>> = ...;
但是你的第二种方法更加面向对象。所以我建议使用第二种方法
答案 4 :(得分:0)
第二个可能会以这种方式更容易
HashMap<Integer, HashMap<String, FancyDataType>> h= ...;
这是您必须插入数据的方式
h=HashMap<Integer, FancyDataType> new Hashtable<Integer,FancyDataType>();
numbers.put(0, new FancyDataType("o","x"));
numbers.put(1, new FancyDataType("t","y"));
numbers.put(1, new FancyDataType("q","z"));
/// ...so one for all 20000
假设FancyDataType类似于
class FancyDataType{
String k,v;
FancyDataType(String k,String v){
this.k=k;this.v=v;
}
}