是否可以将多个键设置为某个值?

时间:2015-04-20 09:55:34

标签: java hashmap key

例如,如果我想通过提供其姓名(key1)或姓名+ last(key2)名称或他的电话号码(key3)来查找某个人的详细信息... 可以在hashmap中实现吗?

2 个答案:

答案 0 :(得分:2)

当然这是可能的(但见下文)。

import java.util.HashMap;
import java.util.Map;

public class SOPlayground {

    public static void main(String[] args) throws Exception {
        Map<String, Person> people = new HashMap<>();

        Person joe = new Person("Joe", "Doe");
        Person jane = new Person("Jane", "Smith");
        people.put(joe.getFirstName(), joe);
        people.put(joe.getLastName(), joe);
        people.put(jane.getFirstName(), jane);
        people.put(jane.getLastName(), jane);

        for (String key : new String[]{"Joe", "Doe", "Jane", "Smith"}) {
            System.out.println(people.get(key));
        }

    }

    private static class Person {

        String firstName;
        String lastName;

        public Person(String firstName, String lastName) {
            this.firstName = firstName;
            this.lastName = lastName;
        }

        public String getFirstName() {
            return firstName;
        }

        public String getLastName() {
            return lastName;
        }

        @Override
        public String toString() {
            return "Person{" + "firstName=" + firstName + ", lastName=" + lastName + '}';
        }

    }
}

输出:

Person{firstName=Joe, lastName=Doe}
Person{firstName=Joe, lastName=Doe}
Person{firstName=Jane, lastName=Smith}
Person{firstName=Jane, lastName=Smith}

但混合键的语义是一个非常糟糕的主意。坚持一个。使用名字的名字或姓氏的所有键

答案 1 :(得分:0)

您无法使用hash-map直接执行此操作。但是你可以自己编写它并不难实现。