【问题标题】:What is the best way to store three attributes entry sets in Java?在 Java 中存储三个属性条目集的最佳方法是什么?
【发布时间】:2010-04-29 01:20:32
【问题描述】:

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

即HashMap映射键值对:Key,Value

最好的映射方式是什么:Key、Value、Value1?

谢谢。

【问题讨论】:

    标签: java mapping


    【解决方案1】:

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

    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&lt;Object&gt;Set&lt;Object&gt; 将更好地用作地图中的Value

    编辑你也可以有一个静态的创建者方法:

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

    【讨论】:

      【解决方案2】:

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

      数据结构可以针对您的具体情况,或者您可以组合一个简单的Pair 类。

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

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

      【讨论】:

        【解决方案3】:

        你可以:

        • 使用列表作为值

          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();
          

        【讨论】:

          【解决方案4】:

          你可以使用 Map >

              public class MyVOClazz{
                  private String value1;
                  private String value2;
          
                  //getters, setters for value1 and value2 
          }
          

          【讨论】:

            猜你喜欢
            • 2011-11-11
            • 2021-02-09
            • 1970-01-01
            • 2019-10-21
            • 2010-10-22
            • 2022-09-27
            • 2013-11-24
            • 2013-02-15
            • 2020-09-09
            相关资源
            最近更新 更多