是否存在存储密钥的类似数据结构,与HashMap<Key, Value>
不同,它存储的单值更多值?如果没有,有任何建议吗?因为使用相同的键和不同的值制作多个HashMap看起来并不那么整洁。
修改 当我说多个值时,我的意思是明显的价值。例如,考虑一张每个人都有钥匙的地图,我们希望存储人名,地址和电话号码。
答案 0 :(得分:1)
检查Guava's Multimap
!它允许您为同一个键设置多个值。
Multimap<String, String> multimap = ArrayListMultimap.create();
multimap.put("Fruits", "Banana");
multimap.put("Fruits", "Apple");
multimap.put("Fruits", "Pear");
multimap.put("Vegetables", "Carrot");
// Getting values
Collection<string> fruits = myMultimap.get("Fruits");
Guava
对于java程序员来说是一个非常有用的库,你一定要查看它!
编辑之后你真的需要一个简单的HashMap<Key, Person>
。您可以像这样定义Person
类:
public class Person {
private String name;
private String address;
private String phoneNumber;
public Person(String name, String address, String phoneNumber) {
this.name = name;
this.address = address;
this.phoneNumber = phoneNumber;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public String getPhoneNumber() {
return phoneNumber;
}
}
使用HashMap<Key, Person>
,其中Key
可能是String
,例如:
Map<String, Person> personMap = new HashMap<String, Person>();
personMap.put("patrick_key", new Person("Patrick", "1000 Notre-Dame street", "123456789"));
personMap.put("stephan_key", new Person("Stephan", "2000 Notre-Dame street", "987654321"));
然后您可以像这样访问Patrick
:
Person person = personMap.get("patrick_key");
答案 1 :(得分:1)
根据您的编辑,您可能仍希望为每个键存储单个值,但将值设为Object。例如
public class PersonInfo {
private String name;
private String address;
private String phoneNumber;
etc...
}
并将地图定义为HashMap<Key, PersonInfo>
答案 2 :(得分:0)
使用hashmap和每个&#34;值&#34;是一个列表(根据您的需要链接或双链接)。
答案 3 :(得分:0)
一个简单的解决方案是创建某种形式的PersonInfo对象,然后将该值与键String一起映射。当您想要调用distinct键时,您可以只检索包含您想要描述的关于该人的任何值的对象。
如果您希望它们不同,您可以将每个电话号码记录在一个单独的列表中,只要用户输入一个号码,您就可以根据全局号码列表进行检查。 (地址/名称可以使用两次,因为它们相当常见,即认为少年和大四生活在同一个家中)