2010-04-29 3 views
1

HashMaps позволяет сопоставлять пары значений ключа; Какова рекомендация, если есть дополнительная ценность?Каков наилучший способ хранения трех наборов атрибутов атрибутов в Java?

HashMap отображает то есть пары ключ-значение: Key, Value

Каков наилучший способ отображения: Key, Value, Value1?

Спасибо.

ответ

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(); 
    
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 на карте.

EDIT вы можете иметь статический творец-метод тоже:

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

0

Вы можете использовать карты < ключ, Список < MyVOClazz>>

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

     //getters, setters for value1 and value2 
} 
Смежные вопросы