在Java中存储三个属性入口集的最佳方法是什么?

时间:2010-04-29 01:20:33

标签: java mapping

HashMaps允许映射键值对;如果有额外的价值,建议是什么?

即HashMap映射键值对:键,值

映射的最佳方式是什么:Key,Value,Value1?

感谢。

4 个答案:

答案 0 :(得分:5)

我喜欢的一个不错的,干净的解决方案是编写一个匹配一对的实用程序类:

public class Pair<U, V> {

    private U first;

    private V second;

public Pair(U first, V second) {

 this.first = first;
 this.second = second;
}

// getters for "first" and "second"

然后将其作为地图中的Value

Map<Key, Pair<U,V>> map;

但是,这将是您始终只有两个值的情况。如果您觉得将来可能会有更多内容,List<Object>Set<Object>最好在地图中用作Value

编辑您也可以使用静态创建者方法:

public static <U, V> Pair<U, V> newInstance(U first, V second) {
        return new Pair<U, V>(first, second);
    }

答案 1 :(得分:2)

标准解决方案是将两个值封装在自己的数据结构中。

数据结构可能特定于您的情况,或者您可以将简单的Pair类混合在一起。

然后,您可以使用结构的实例作为列表值,例如map.put(key, new Pair(foo, bar));

还可以选择使用专门的Map实施,例如http://commons.apache.org/collections/api-3.1/org/apache/commons/collections/MultiMap.html

答案 2 :(得分:1)

你可以:

  • 使用列表作为值

    Map<String,List<String>> map = new HashMap<String,List<String>>();
    map.put("key",Arrays.asList("one","two" );
    map.get("key").get(0);
    map.get("key").get(1);
    
  • 使用数组作为值,并引用为

    Map<String,String[]> map = new HashMap<String,String[]>();
    map.put( "key", new String[]{"one", "two"});
    map.get("key")[0];
    map.get("key")[1];
    
  • 使用自定义通用类来保存两个值

    Map<String,Pair> map = new HashMap<String,Pair>();
     map.put( "key", new Pair<String,String>("one","two"));
     map.get("key").val1();
     map.get("key").val2();
    

答案 3 :(得分:0)

您可以使用Map&lt;键,列表与LT; MyVOClazz&gt; &GT;

    public class MyVOClazz{
        private String value1;
        private String value2;

        //getters, setters for value1 and value2 
}