HashMap存储自定义对象

将学生对象和学生的归属地通过键与值存储到map集合中。


   
   
  1. import java.util.HashMap;
  2. import java.util.Iterator;
  3. import java.util.Set;
  4. class Student {
  5. String name;
  6. int age;
  7. public Student(String name,int age){
  8. super();
  9. this.name=name;
  10. this.age=age;
  11. }
  12. public String getName(){
  13. return name;
  14. }
  15. public void setName(String name){
  16. this.name=name;
  17. }
  18. public int getAge(){
  19. return age;
  20. }
  21. public void setAge(int age){
  22. this.age=age;
  23. }
  24. }
  25. public class HashMapDemo{
  26. public static void main(String[] args){
  27. HashMap<Student,String> hm= new HashMap<Student,String>();
  28. hm.put( new Student( “lisi”, 38), “北京”);
  29. hm.put( new Student( “zhaosi”, 34), “上海”);
  30. hm.put( new Student( “xiaoqiang”, 31), “沈阳”);
  31. hm.put( new Student( “wangcai”, 28), “大连”);
  32. hm.put( new Student( “zhaosi”, 34), “铁岭”);
  33. Set<Student> keySet=hm.keySet();
  34. Iterator<Student> it=keySet.iterator();
  35. while(it.hasNext()){
  36. Student key=it.next();
  37. String value=hm.get(key);
  38. System.out.println(key.getName()+ “:”+key.getAge()+ “…”+value);
  39. }
  40. }
  41. }
运行结果:


当键一样时,其值并没有被覆盖,所以要判断键是否相同,HashMap需要定义hashCode和equals方法,在Student类中要复写方法:


   
   
  1. import java.util.HashMap;
  2. import java.util.Iterator;
  3. import java.util.Set;
  4. class Student {
  5. String name;
  6. int age;
  7. public Student(String name,int age){
  8. super();
  9. this.name=name;
  10. this.age=age;
  11. }
  12. public String getName(){
  13. return name;
  14. }
  15. public void setName(String name){
  16. this.name=name;
  17. }
  18. public int getAge(){
  19. return age;
  20. }
  21. public void setAge(int age){
  22. this.age=age;
  23. }
  24. public int hashCode(){ //复写hashCode()
  25. return name.hashCode()+age;
  26. }
  27. public boolean equals(Object obj){ //复写equals
  28. if( this==obj) return true;
  29. if(!(obj instanceof Student)) throw new ClassCastException( "类型错误"); //输入类型错误
  30. Student p = (Student)obj; //强制转换
  31. return this.name.equals(p.name) && this.age==p.age; //说明姓名和年龄相同则为同一元素
  32. }
  33. }
  34. public class HashMapDemo{
  35. public static void main(String[] args){
  36. HashMap<Student,String> hm= new HashMap<Student,String>();
  37. hm.put( new Student( "lisi", 38), "北京");
  38. hm.put( new Student( "zhaosi", 34), "上海");
  39. hm.put( new Student( "xiaoqiang", 31), "沈阳");
  40. hm.put( new Student( "wangcai", 28), "大连");
  41. hm.put( new Student( "zhaosi", 34), "铁岭");
  42. Set<Student> keySet=hm.keySet();
  43. Iterator<Student> it=keySet.iterator();
  44. //以下被注释的代码可以替换上面两句:
  45. //Iterator<Student> it=hm.keySet().iterator();
  46. while(it.hasNext()){
  47. Student key=it.next();
  48. String value=hm.get(key);
  49. System.out.println(key.getName()+ ":"+key.getAge()+ "..."+value);
  50. }
  51. }
  52. }
运行结果:


HashMap可以存放自定义对象。在给HashMap添加元素时,键值对的键可以是自定义对象,值可以是任何类型的对象。但是,在使用自定义对象作为键时,需要确保自定义对象正确地实现了hashCode()和equals()方法。这是因为HashMap在判断键是否相同时会依赖于hashCode()和equals()方法的实现。 在给HashMap添加自定义对象时,可以复写自定义类的hashCode()和equals()方法来确保键的唯一性。在上面的示例中,Student类重写了hashCode()和equals()方法,以确保当name和age相同时,对象被视为相同的键。这样,即使添加了多个相同属性的Student对象,它们仍然被视为相同的键。 通过复写hashCode()和equals()方法,HashMap可以正确地将自定义对象作为键进行存储和查找。这样,可以方便地通过自定义对象来获取相应的值。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [HashMap集合存储自定义对象](https://blog.csdn.net/weixin_57219176/article/details/124340641)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [HashMap存储自定义对象](https://blog.csdn.net/houguofei123/article/details/81712692)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值