Мне было интересно, как я могу получить третье значение для первого ключа на этой карте. Это возможно? Извините, если это повторено, но я ничего не нашел.
HashMap: один ключ, несколько значений
Ответ 1
Библиотеки существуют для этого, но самый простой простой способ Java - создать Map
of List
следующим образом:
Map<Object,ArrayList<Object>> multiMap = new HashMap<Object,ArrayList<Object>>();
Ответ 2
Похоже, вы ищете multimap. Guava имеет различные Multimap
реализации, обычно созданные с помощью Multimaps
.
Я бы предположил, что использование этой реализации, вероятно, будет проще, чем сворачивать ваши собственные, выработать то, что должен выглядеть API, тщательно проверять существующий список при добавлении значения и т.д. Если ваша ситуация имеет особое отвращение к третьему партийных библиотек, возможно, стоит этого сделать, но в противном случае Гуава - сказочная библиотека, которая, вероятно, поможет вам и с другим кодом:)
Ответ 3
Например:
Map<Object,Pair<Integer,String>> multiMap = new HashMap<Object,Pair<Integer,String>>();
где Pair
- это параметрический класс
public class Pair<A, B> {
A first = null;
B second = null;
Pair(A first, B second) {
this.first = first;
this.second = second;
}
public A getFirst() {
return first;
}
public void setFirst(A first) {
this.first = first;
}
public B getSecond() {
return second;
}
public void setSecond(B second) {
this.second = second;
}
}
Ответ 4
У вас есть что-то вроде этого?
HashMap<String, ArrayList<String>>
Если это так, вы можете выполнить итерацию через свой ArrayList и получить элемент, который вам нравится, с помощью arrayList.get(i).
Ответ 5
Стандартная Java HashMap не может хранить несколько значений для каждого ключа, любая новая запись, которую вы добавите, перезапишет предыдущую.
Ответ 6
Это то, что я нашел в подобном вопросе answer
Map<String, List<String>> hm = new HashMap<String, List<String>>();
List<String> values = new ArrayList<String>();
values.add("Value 1");
values.add("Value 2");
hm.put("Key1", values);
// to get the arraylist
System.out.println(hm.get("key1"));
РЕЗУЛЬТАТ: [Значение 1, значение 2]
Ответ 7
Попробуйте использовать коллекции для хранения значений ключа:
Map<Key, Collection<Value>>
вам нужно самому сохранить список значений
Ответ 8
Я нашел блог в случайном поиске, я думаю, что это поможет в этом: http://tomjefferys.blogspot.com.tr/2011/09/multimaps-google-guava.html
public class MutliMapTest {
public static void main(String... args) {
Multimap<String, String> myMultimap = ArrayListMultimap.create();
// Adding some key/value
myMultimap.put("Fruits", "Bannana");
myMultimap.put("Fruits", "Apple");
myMultimap.put("Fruits", "Pear");
myMultimap.put("Vegetables", "Carrot");
// Getting the size
int size = myMultimap.size();
System.out.println(size); // 4
// Getting values
Collection<String> fruits = myMultimap.get("Fruits");
System.out.println(fruits); // [Bannana, Apple, Pear]
Collection<string> vegetables = myMultimap.get("Vegetables");
System.out.println(vegetables); // [Carrot]
// Iterating over entire Mutlimap
for(String value : myMultimap.values()) {
System.out.println(value);
}
// Removing a single value
myMultimap.remove("Fruits","Pear");
System.out.println(myMultimap.get("Fruits")); // [Bannana, Pear]
// Remove all values for a key
myMultimap.removeAll("Fruits");
System.out.println(myMultimap.get("Fruits")); // [] (Empty Collection!)
}
}
Ответ 9
Мысль о карте с двумя ключами сразу заставила меня использовать определяемый пользователем ключ, и это, вероятно, будет класс. Ниже приведен ключ:
public class MapKey {
private Object key1;
private Object key2;
public Object getKey1() {
return key1;
}
public void setKey1(Object key1) {
this.key1 = key1;
}
public Object getKey2() {
return key2;
}
public void setKey2(Object key2) {
this.key2 = key2;
}
}
// Create first map entry with key <A,B>.
MapKey mapKey1 = new MapKey();
mapKey1.setKey1("A");
mapKey1.setKey2("B");
Ответ 10
HashMap - одиночный ключ и несколько значений с использованием списка
Map<String, List<String>> map = new HashMap<String, List<String>>();
// create list one and store values
List<String> One = new ArrayList<String>();
One.add("Apple");
One.add("Aeroplane");
// create list two and store values
List<String> Two = new ArrayList<String>();
Two.add("Bat");
Two.add("Banana");
// put values into map
map.put("A", One);
map.put("B", Two);
map.put("C", Three);