Java много картографических массивов - PullRequest
5 голосов
/ 25 декабря 2011

Можно ли сопоставить ключ с многомерным списком массивов.Что-то вроде следующего примера ..

Map<K,V>

Где K - ключ для списка алфавита, а V - список многомерных массивов или список обычных массивов, в котором хранится список слов.Что-то вроде приложения, которое читает файл словаря.Я хочу увидеть пример.Примером может быть что угодно, связанное с картой и многомерным массивом-списком. Или есть какой-нибудь другой эффективный способ реализовать коллекцию? Я никогда не использовал такие реализации, поэтому, если уже есть тема, связанная с моим QA, пожалуйста, опубликуйте ссылку.

Ответы [ 3 ]

5 голосов
/ 25 декабря 2011

Вы можете использовать Multimap's Guava , если вы хотите связать несколько значений с одним ключом. Вам нужно ArrayListMultimap для вашего конкретного случая.

Пример

ListMultimap<String, String> dict= new ArrayListMultimap<String, String>();
dict.put("key 1", "value 1");
dict.put("key 1", "value 2");
dict.put("key 2", "value 1");
5 голосов
/ 25 декабря 2011

Вы всегда можете сделать Map<String, <List<String>>.например,

Map<String, List<String>> multimap = new HashMap<String, List<String>>();
String key = "asdf";
List<String> values = Arrays.asList("foo", "bar");
multimap.put(key, values);

Вы также можете использовать интерфейс Multimap<String, String> в Google Guava - это может быть лучше для ваших нужд.Это несколько упрощает кодирование -

Multimap<String, String> multimap = new ArrayListMultimap<String, String>();
String key = "asdf";
multimap.put(key, "foo");
multimap.put(key, "bar");
4 голосов
/ 14 февраля 2013

Следующий код без библиотеки Google Guava.Используется для двойного значения в качестве ключа и отсортированного порядка

Map<Double,List<Object>> multiMap = new TreeMap<Double,List<Object>>();

for( int i= 0;i<15;i++)
{
    List<Object> myClassList = multiMap.get((double)i);
    if(myClassList == null)
    {
        myClassList = new ArrayList<Object>();
        multiMap.put((double) i,myClassList);
    }
    myClassList.add("Value "+ i);
}

List<Object> myClassList = multiMap.get((double)0);
if(myClassList == null)
{
    myClassList = new ArrayList<Object>();
    multiMap.put( (double) 0,myClassList);
}
myClassList.add("Value Duplicate");
for (Map.Entry entry : multiMap.entrySet()) 
{
  System.out.println("Key = " + entry.getKey() + ", Value = " +entry.getValue());
}
...