将两个值关联到Java HashMap中的单个键

时间:2016-03-31 08:37:21

标签: java hashmap

我试图将两个不同数据类型的值[一个长,另一个是字符串]关联到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)

这种方法有任何明显的缺点吗?我正在寻找一种可以在查找中很好地扩展的解决方案。

谢谢!

2 个答案:

答案 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中的值,在这种情况下,您只需使用自己的类来包装两个单独的值。

只要您不使用自定义课程作为密钥,您就已经完成了。