例如,如果我想通过提供其姓名(key1)或姓名+ last(key2)名称或他的电话号码(key3)来查找某个人的详细信息... 可以在hashmap中实现吗?
答案 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直接执行此操作。但是你可以自己编写它并不难实现。