我试图将两个不同数据类型的值[一个长,另一个是字符串]关联到Java HashMap中的单个键。 我环顾四周,对类似问题提出了建议,包括使用Apache Collections Framework中的MultiValuedMap或使用Guava中的MultiMap。但是我认为这些可能有点过分,我不想在我的系统中添加额外的二进制文件。
定义一个类有什么问题,例如:
class X {
long value1;
String value2;
X(long v, String w) { this.value1 = v; this.value2 = w;}
}
插入HashMap时执行以下操作:
X obj = new X(1000, "abc");
map.add("key", obj)
这种方法有任何明显的缺点吗?我正在寻找一种可以在查找中很好地扩展的解决方案。
谢谢!
答案 0 :(得分:2)
你的方法没有错。由于Java缺少元组类,您可以通常定义自己的(而不是类X
):
public class Tuple<X, Y> {
public final X x;
public final Y y;
public Tuple(X x, Y y) {
this.x = x;
this.y = y;
}
}
另见Using Pairs or 2-tuples in Java
用法如下:
Map<String,Tuple<Long,String>> map = new HashMap<>();
Tuple<Long,String> obj = new Tuple<>(1000L, "abc");
map.put("key", obj);
答案 1 :(得分:0)
完全没问题。您可以将任何对象存储为Map
中的值,在这种情况下,您只需使用自己的类来包装两个单独的值。
只要您不使用自定义课程作为密钥,您就已经完成了。