我不确定如何使用get()来获取我的信息。看着我的书,他们把钥匙传给了get()。我认为get()返回与该键相关联的对象查看文档。但我必须在这里做错事......有什么想法吗?
import java.util.*;
public class OrganizeThis
{
/**
Add a person to the organizer
@param p A person object
*/
public void add(Person p)
{
staff.put(p, p.getEmail());
System.out.println("Person " + p + "added");
}
/**
* Find the person stored in the organizer with the email address.
* Note, each person will have a unique email address.
*
* @param email The person email address you are looking for.
*
*/
public Person findByEmail(String email)
{
Person aPerson = staff.get(email);
return aPerson;
}
private Map<Person, String> staff = new HashMap<Person, String>();
public static void main(String[] args)
{
OrganizeThis testObj = new OrganizeThis();
Person person1 = new Person("J", "W", "111-222-3333", "JW@ucsd.edu");
testObj.add(person1);
System.out.println(testObj.findByEmail("JW@ucsd.edu"));
}
}
答案 0 :(得分:7)
你做错的是你以相反的顺序插入密钥和值(假设你想要电子邮件作为密钥)。您可以在docs中看到put
的签名占用(key, value)
。
更改
staff.put(p, p.getEmail());
到
staff.put(p.getEmail(), p);
和
private Map<Person, String> staff = new HashMap<Person, String>();
到
private Map<String, Person> staff = new HashMap<String, Person>();
现在,您可以通过其电子邮件地址查找Person
。
答案 1 :(得分:0)
重要的是要意识到地图是方向。也就是说,如果您有一个Map<Person, Date>
存储生日,那么很容易查找任何人的生日,并且无法查找生日的人(可能很容易为零或多于一个)。
现在,您是否希望能够查找某个人的电子邮件地址或电子邮件地址的人?你的代码混合了这些东西:
Map<Person,String>
,表示您将使用人物作为键,并使用字符串作为值 - 即查找某人的电子邮件地址。staff.put(p, p.getEmail())
添加数据,这也表明您将使用人数作为密钥。findByEmail
方法,该方法必须使用电子邮件地址作为关键字 - 这与您设置地图的方式相反。因此,地图只能向一个方向发展。你可以决定它的方向,但你必须保持一致。如果您需要能够在两个方向上进行查找,请考虑使用两个地图!
答案 2 :(得分:0)
这是一个显示大多数Map
功能的代码段:
import java.util.*;
public class MapExample {
public static void main(String[] args) {
Map<String,Integer> map = new HashMap<String,Integer>();
map.put("One", 1);
map.put("Two", 2);
map.put("Three", 3);
System.out.println(map.size()); // prints "3"
System.out.println(map);
// prints "{Three=3, One=1, Two=2}"
// HashMap allows null keys and values
// Map also allows several keys to map to the same values
map.put(null, 1);
map.put("?", null);
System.out.println(map.size()); // prints "5"
System.out.println(map);
// prints "{null=1, Three=3, ?=null, One=1, Two=2}"
// get values mapped by key
System.out.println(map.get("One")); // prints "1"
System.out.println(map.get("Two")); // prints "2"
System.out.println(map.get("Three")); // prints "3"
// get returns null if
// (i) there's no such key, or
// (ii) there's such key, and it's mapped to null
System.out.println(map.get("Four") == null); // prints "true"
System.out.println(map.get("?") == null); // prints "true"
// use containsKey to check if map contains key
System.out.println(map.containsKey("Four")); // prints "false"
System.out.println(map.containsKey("?")); // prints "true"
// use keySet() to get view of keys
Set<String> keys = map.keySet();
System.out.println(keys);
// prints "[null, Three, ?, One, Two]"
// the view supports removal
keys.remove("Three");
System.out.println(map);
// prints "{null=1, ?=null, One=1, Two=2}"
// use values() to get view of values
Collection<Integer> values = map.values();
System.out.println(values);
// prints "[1, null, 1, 2]"
// the view supports removal
values.remove(null);
System.out.println(map);
// prints "{null=1, One=1, Two=2}"
values.remove(1); // removes at most one mapping
System.out.println(map);
// prints "{One=1, Two=2}"
// iterating all entries using for-each
for (Map.Entry<String,Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + "->" + entry.getValue());
}
// prints "One->1", "Two->2"
map.clear();
System.out.println(map.isEmpty()); // prints "true"
}
}