Инициализировать HashMap с массивом элементов? - PullRequest
8 голосов
/ 26 февраля 2012

У меня есть результат долгой обработки. Я не хочу передавать его непосредственно в HashMap и делать еще некоторые вычисления. Я хочу сохранить его, а затем повторно использовать каждый раз.

Мой массив значений выглядит так:

{0=0, 1=15, 2=70, 3=90, 4=90, 5=71, 6=11, 7=1, 8=61, 9=99, 10=100, 11=100, 12=100, 13=66, 14=29, 15=98, 17=100, 16=100, 19=100, 18=100, 21=62, 20=90, 23=100, 22=100, 25=100, 24=100, 27=91, 26=100, 29=100, 28=68, 31=100, 30=100, 34=83, 35=55, 32=100, 33=100, 38=100, 39=100, 36=100, 37=100, 42=10, 43=90, 40=99, 41=33, 46=99, 47=40, 44=100, 45=100, 48=2}  

Есть ли способ инициализировать новый HashMap, передав эти значения? Может быть, что-то вроде инициализации простого массива:

float[] list={1,2,3};  

Ответы [ 4 ]

9 голосов
/ 26 февраля 2012

Для проблемы, которую вы поставили перед нами, лучшим решением будет:

int [] map =
  {0, 15, 70, 90, 90, 71, 11, 1, 61, 99, 100, 100, 100, 66, 29, 98, 100, 100, 
   100, 100, 90, 62, 100, 100, 100, 100, 100, 91, 68, 100, 100, 100, 100, 100,
   83, 55, 100, 100, 100, 100, 99, 33, 10, 90, 100, 100, 99, 40, 2};

В конце концов, это своего рода карта - она ​​сопоставляет индекс с соответствующим значением. Однако, если ваши ключи не настолько специфичны, вы можете сделать что-то вроде:

int [][] initializer =
    {{0, 0}, {1, 15}, {2, 70}, {3, 90}, {4, 90}, {5, 71}, {6, 11}, {7, 1}, {8, 61},
     {9, 99}, {10, 100}, {11, 100}, {12, 100}, {13, 66}, {14, 29}, {15, 98},
     {17, 100}, {16, 100}, {19, 100}, {18, 100}, {21, 62}, {20, 90}, {23, 100},
     {22, 100}, {25, 100}, {24, 100}, {27, 91}, {26, 100}, {29, 100}, {28, 68},
     {31, 100}, {30, 100}, {34, 83}, {35, 55}, {32, 100}, {33, 100}, {38, 100},
     {39, 100}, {36, 100}, {37, 100}, {42, 10}, {43, 90}, {40, 99}, {41, 33},
     {46, 99}, {47, 40}, {44, 100}, {45, 100}, {48, 2}};
Map<Integer, Integer> myMap = new HashMap<Integer, Integer> ();
for (int i = 0; i < initializer.length; i++) {
    myMap.put(initializer[i][0], initializer[i][1]);
}
2 голосов
/ 26 февраля 2012

Ваш вопрос очень запутанный.Вам нужно скопировать содержимое карты на другую карту, использовать метод putAll .

Map<Integer, Integer> newMap = new HashMap<Integer, Integer>();
newMap.putAll(oldMap);

или непосредственно конструктор копирования:

Map<Integer, Integer> newMap = new HashMap<Integer, Integer>(oldMap);
2 голосов
/ 26 февраля 2012

единственный способ инициализировать HashMap значениями - это использовать метод put() несколько раз после создания объекта. Это связано с тем, что HashMap необходимо выполнить механизм хеширования, чтобы правильно упорядочить объекты на карте для достижения производительности, которую он гарантирует.

1 голос
/ 26 февраля 2012

Насколько я знаю, вы не можете создать экземпляр Hashmap так же легко, как массив.

Что вы можете сделать, это написать метод с использованием точных правил и использовать его для создания карты:*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...