你想要的是一個multimap,一個可以爲每個鍵有多個值的映射,因爲每個類別都可以有多個(描述符,值)對。在某些第三方Java庫(如Guava)中有多個映射,但您可以使用映射到值列表(如Map<String, List<Descriptor>>
,其中Descriptor
是包含(描述符,價值)對。
在Java 8中添加到Map
的merge
方法對於構建這樣的映射非常有效。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.Map;
public class Descriptor {
private final String descriptor;
private final int value;
public Descriptor(String descriptor, int value) {
this.descriptor = Objects.requireNonNull(descriptor);
this.value = value;
}
public String getDescriptor() {
return descriptor;
}
public int getValue() {
return value;
}
@Override public String toString() {
return descriptor + ", " + value;
}
public static void main(String[] args) {
// create map (essentially a multimap
Map<String, List<Descriptor>> map = new HashMap<>();
insert(map, "Computers", "Keyboard", 10);
insert(map, "Computers", "Mouse", 5);
insert(map, "Cars", "Lamborghini", 6);
insert(map, "Cars", "BMW", 3);
// display all descriptors for a category
String category = "Cars";
for (Descriptor desc : map.get(category)) {
System.out.println(category + ", " + desc);
}
}
public static void insert(Map<String, List<Descriptor>> map,
String category, String descriptor, int value) {
// insert items in the map using Map.merge
List<Descriptor> list = new ArrayList<>();
list.add(new Descriptor(descriptor, value));
map.merge(category, list, Descriptor::concat);
}
public static List<Descriptor> concat(List<Descriptor> one,
List<Descriptor> two) {
one.addAll(two);
return one;
}
}
我認爲你可以處理讀取和解析輸入文件自己,或者你的意圖的工作說出來分開,因爲你的問題專門詢問有關「HashMap的幫助」,並說,你有使用HashMap中的問題解決這個問題。
你打算如何在地圖上查找東西?按類別?通過描述符? – 2014-10-28 17:16:18
按類別我想,我想。我只是爲了打印每個描述符的值 – 2014-10-28 17:24:00
鏈接到[HashMap實現問題...](http://stackoverflow.com/a/26611687/2958086) – Compass 2014-10-28 17:28:24