Hashmap使用哪个键和值来搜索名称和phonenumber

时间:2014-05-09 11:22:15

标签: java collections hashmap

我要求放置" Name"和" phonenumber"在地图中。 我不明白我在key中将valuehashmap放在哪一处。 我的要求是我们可以用电话号码和姓名搜索。

喜欢姓名:" sanjay"电话号码:" 111&#34 ;;

名称:" Krish"电话号码:" 222&#34 ;;

如果我搜索桑杰'它为我提供了桑杰的电话号码。

并且,有多个同名用户,一个用户可能有一个以上的电话号码。

感谢。

5 个答案:

答案 0 :(得分:1)

如果您有Person课程,请制作如下地图:Map<Person, Collection<String>>

然后,您可以通过map.get(somePerson)查找电话号码,如果此人不存在,则返回null

您还可以考虑制作一个PhoneNumber课程,其中包含经过验证的电话号码的字符串值:Map<Person, Collection<PhoneNumber>>

答案 1 :(得分:1)

使用类包装器:

public class Person {

    private List<String> phoneNumbers;
    private String fullName;

    //getters, setters, constructors for field values

    @Override
    public boolean equals(Object o) {
        if (!(o instanceof Person) {
            return false;
        }
        Person p = (Person) o;
        return this.fullName.equals(p.fullName); //and other qualifying things
    }

    @Override
    public int hashcode() {
        //account for fields that you use in #equals(Object)
    }

 }

然后你可以根据你想要的东西进行索引:

 /* Full name => People */
 Map<String, List<Person>> people = new HashMap<>();
 /* Number => Person */
 Map<String, Person> people = new HashMap<>();

请注意,如果您只比较equals(Object)中的名称,则返回原点1。添加更多要比较的内容以与唯一性保持一致。

答案 2 :(得分:1)

哈希映射的强大功能是能够以O(1)效率查找值。 为此,密钥必须是您搜索的对象。

例如,如果要按名称搜索,则键应该是名称。 由于一个人可以拥有多个电话号码,因此该值应为电话号码列表。

如果你想根据电话号码找到人名,你应该反过来处理 - 键是电话号码,价值就是人名。

也许你想要两个......

答案 3 :(得分:0)

上面有很好的答案,可能这也有帮助

这里学生通过重写hashCode()和equals()方法成为关键。

public class Student {

        public String studentId;
        public String studentName;
        public Student(String studentId, String studentName) {
            this.studentId=studentId;
            this.studentName =studentName;

        }
        @Override
        public int hashCode() {
            return 1234;
        }
        @Override
        public boolean equals(Object o) {
            if (o instanceof Student) {
                Student student=(Student)o;
                if (this.studentId.equalsIgnoreCase(student.studentId)) {
                    return true;
                } else {
                    return false;
                }
            } else {
                return false;
            }
        }
    }

电话号码类:

public class PhoneNumber {
        public String phoneNumber;
        public PhoneNumber(String phoneNumber) {
            this.phoneNumber =phoneNumber;
        }
}

人类:

import java.util.HashMap;
import java.util.Set;
import java.util.List;
import com.google.common.collect.Lists;

public class Person {
        public static void main(String[] args) {
            Student e1=new Student("e001","studentOne");
            Student e2=new Student("e002","studentTwo");


            PhoneNumber d1 = new PhoneNumber("9999999998");
            PhoneNumber d2 = new PhoneNumber("9999999999");
            List listOfPhoneNumbersOfStudentOne = Lists.newArrayList(d1,d2);

            PhoneNumber d3 = new PhoneNumber("9999999997");
            PhoneNumber d4 = new PhoneNumber("9999999996");
            List listOfPhoneNumbersOfStudentTwo = Lists.newArrayList(d3,d4);

/* Here Student made as key by overriding hashCode() and equals() method.*/

            HashMap<Student, List<PhoneNumber>> map=new HashMap<Student, List<PhoneNumber>>();
            map.put(e1, listOfPhoneNumbersOfStudentOne);
            map.put(e2, listOfPhoneNumbersOfStudentTwo);

            Set<Student> key=map.keySet();
            for (Student student : key) {
                System.out.println(student.studentId+" "+student.studentName +" ");


            }
        }

    }

答案 4 :(得分:0)

公共类Assignment4 {     HashMap map = new HashMap <>();

public void addContact(String name, Integer number) {
    map.put(name, number);

}

public void getphoneNumber(String name) {
    if (map.containsKey(name)) {
        Integer a = map.get(name);
        System.out.println("Contact of " +name+" is " + a);
    }
}

public static void main(String[] args) {

    Assignment4 a4 = new Assignment4();
    a4.addContact("vishal", 10345);
    a4.addContact("sachin", 30456);
    a4.addContact("sai", 30458);
    Scanner s=new Scanner(System.in);
    System.out.println("Enter name to get contact details");
    a4.getphoneNumber(s.next());
    s.close();

}

}