我要求放置" Name
"和" phonenumber
"在地图中。
我不明白我在key
中将value
和hashmap
放在哪一处。
我的要求是我们可以用电话号码和姓名搜索。
喜欢姓名:" sanjay
"电话号码:" 111
&#34 ;;
名称:" Krish
"电话号码:" 222
&#34 ;;
并且,有多个同名用户,一个用户可能有一个以上的电话号码。
感谢。
答案 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();
}
}