帮助Java中的Hashmaps

时间:2010-05-14 04:06:42

标签: java hashmap

我不确定如何使用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"));
    }
}

3 个答案:

答案 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"
    }
}