Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hashmap使用哪个键和值搜索名称和电话号码_Java_Collections_Hashmap - Fatal编程技术网

Java Hashmap使用哪个键和值搜索名称和电话号码

Java Hashmap使用哪个键和值搜索名称和电话号码,java,collections,hashmap,Java,Collections,Hashmap,我需要把“姓名”和“电话号码”放在地图上。 我不明白我在hashmap中把哪个东西作为key和value。 我的要求是我们可以用电话号码和姓名搜索 比如名字:“sanjay”电话号码:“111” 姓名:“Krish”电话号码:“222” 稍后,如果我搜索“sanjay”,请按名称搜索,并提供sanjay的电话号码 而且,有多个同名用户,一个用户可能有多个电话号码 谢谢。如果你有一个人类,做一个像这样的地图:地图 然后您可以通过执行map.get(somePerson)查找电话号码,如果此人不存在

我需要把“
姓名
”和“
电话号码
”放在地图上。 我不明白我在
hashmap
中把哪个东西作为
key
value
。 我的要求是我们可以用电话号码和姓名搜索

比如名字:“
sanjay
”电话号码:“
111

姓名:“
Krish
”电话号码:“
222

稍后,如果我搜索“sanjay”,请按名称搜索,并提供sanjay的电话号码

而且,有多个同名用户,一个用户可能有多个电话号码


谢谢。

如果你有一个
类,做一个像这样的地图:
地图

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

您也可以考虑编写一个<代码> PooNothNo/Cux>类,它包含一个经过验证的电话号码的字符串值:<代码> MAP .< /P>

使用类包装器:

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)
    }

 }
公共类人物{
私人电话号码列表;
私有字符串全名;
//字段值的getter、setter和构造函数
@凌驾
公共布尔等于(对象o){
如果(!(o个人实例){
返回false;
}
人p=(人)o;
返回this.fullName.equals(p.fullName);//和其他限定内容
}
@凌驾
公共int hashcode(){
//说明在#equals(对象)中使用的字段
}
}
然后,您可以根据需要编制索引:

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

请记住,如果您只比较
equals(Object)
中的名称,您就回到了原点。添加更多要比较的内容以与唯一性保持一致。

哈希映射的强大功能是能够在O(1)效率中找到值。 要使其工作,键必须是您搜索的对象

例如,如果要按名称搜索,则密钥应为名称。 因为一个人可以有几个电话号码,所以这个值应该是一个电话号码列表

如果你想根据电话号码找到人名,你应该用另一种方法来处理——键是电话号码,值是人名


也许你两者都想要…

上面有很好的答案,也许这也会有帮助

在这里,学生通过重写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 +" ");


            }
        }

    }
import java.util.HashMap;
导入java.util.Set;
导入java.util.List;
导入com.google.common.collect.list;
公共阶层人士{
公共静态void main(字符串[]args){
学生e1=新生(“e001”、“学生通”);
学生e2=新生(“e002”、“学生二”);
电话号码d1=新电话号码(“999999999 8”);
PhoneNumber d2=新电话号码(“999999999”);
ListOfPhoneNumberOfStudentone=Lists.newArrayList(d1,d2);
电话号码d3=新电话号码(“999999999 7”);
电话号码d4=新电话号码(“999999996”);
ListListOfPhoneNumberOfStudentTwo=Lists.newArrayList(d3,d4);
/*在这里,学生通过重写hashCode()和equals()方法作为键*/
HashMap=newHashMap();
map.put(e1,Studentone的电话号码列表);
map.put(e2,学生2的电话号码列表);
Set key=map.keySet();
适用于(学生:钥匙){
System.out.println(student.studentId+“”+student.studentName+“”);
}
}
}
公共类分配4{ HashMap=newHashMap()


}

如果桑杰不止一个,你怎么知道该返回哪个电话号码?在你提到这个要求之前,你讨论的都是地图的基本用法(例如,
map
,其中键是名字,值是电话号码)。@Duncan然后我会用“Person”类。请建议您需要不同的查找键。有了这些元素,您无法使用映射。为什么phonenumber是String类型?它通常可以用数字以外的东西进行解析,例如
+
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();

}