一种类似于HashMap的数据结构,其中包含多个" distinct"值

时间:2015-11-06 14:59:50

标签: java hashmap

是否存在存储密钥的类似数据结构,与HashMap<Key, Value>不同,它存储的单值更多值?如果没有,有任何建议吗?因为使用相同的键和不同的值制作多个HashMap看起来并不那么整洁。

修改 当我说多个值时,我的意思是明显的价值。例如,考虑一张每个人都有钥匙的地图,我们希望存储人名,地址和电话号码。

4 个答案:

答案 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键时,您可以只检索包含您想要描述的关于该人的任何值的对象。

如果您希望它们不同,您可以将每个电话号码记录在一个单独的列表中,只要用户输入一个号码,您就可以根据全局号码列表进行检查。 (地址/名称可以使用两次,因为它们相当常见,即认为少年和大四生活在同一个家中)