HashMap的遍历和各种用法

  1. 遍历key 和value
  2. firstmethod
  3. HashMap<Integer,String> maps=new HashMap<Integer,String>();  

  1.        maps.put(1,"xiaomao");  
  2.        maps.put(2,"xiaogou");  
  3.        maps.put(3,"xiaohua");  
  4.        Set<Map.Entry<Integer, String>> entrySet=maps.entrySet();  
  5.        for(Map.Entry<Integer, String> entry: entrySet){  
  6.         System.out.println(entry.getKey() + ".........." + entry.getValue());  
  7.        }  
  8. second method
  9. Iterator < Map . Entry < String , String >> iterator = map . entrySet ( ) . iterator ( ) ;
    while ( iterator . hasNext ( ) ) {
    Map . Entry < String , String > entry = iterator . next ( ) ;
    entry . getKey ( ) ;
    entry . getValue ( ) ;
    }
    third method
  10. Set < Entry < String , String >> entrySet = map . entrySet ( ) ;
    for ( Entry < String , String > entry : entrySet ) {
    entry . getKey ( ) ;
    entry . getValue ( ) ;
    }


key为对象时得注意必须要修改equals方法 应为key是唯一的 如果不修改equals 传入对象和key 永远不会相等

  1.      public boolean equals(Object obj)    
  2.      {    
  3.      if(obj instanceof key)    
  4.      {    
  5.       if(((key)obj).i == i)//自己社判断条件哦    
  6.          return true;    
  7.      }    
  8.      return false;    
  9.      }    
  10.      @Override    
  11.      public int hashCode()    
  12.      {    
  13.      return i;   // 自己设置判断条件哦!看具体业务流程
  14.      }   

详细案列  mldn的 当你的key为对象时特别得注意
  1. import java.util.Map ;  
  2. import java.util.HashMap ;  
  3. class Person{  
  4.     private String name ;  
  5.     private int age ;  
  6.     public Person(String name,int age){  
  7.         this.name = name ;  
  8.         this.age = age ;  
  9.     }  
  10.     public String toString(){  
  11.         return "姓名:" + this.name + ";年龄:" + this.age ;  
  12.     }  
  13.     public boolean equals(Object obj){  
  14.         if(this==obj){  
  15.             return true ;  
  16.         }  
  17.         if(!(obj instanceof Person)){  
  18.             return false ;  
  19.         }  
  20.         Person p = (Person)obj ;  
  21.         if(this.name.equals(p.name)&&this.age==p.age){  
  22.             return true ;  
  23.         }else{  
  24.             return false ;  
  25.         }  
  26.     }  
  27.     public int hashCode(){  
  28.         return this.name.hashCode() * this.age ;  //确保hashcode值不同
  29.     }  
  30. };  
  31. public class HashMapDemo08{  
  32.     public static void main(String args[]){  
  33.         Map<Person,String> map = null ;  
  34.         map = new HashMap<Person,String>() ;  
  35.         map.put(new Person("张三",30),"zhangsan");    // 增加内容  
  36.         System.out.println(map.get(new Person("张三",30))) ;  
  37.     }  
  38. };  


上面是HashMap查找一个实例的过程,可以看到他的判断条件是

[java]  view plain copy
  1. e.hash == hash 并且 <span style="font-family: Arial, Helvetica, sans-serif;">(k = e.key) == key || (key != null && key.equals(k))</span>  
前面一个条件是说两个对象的hashCode一样,后面一个条件是说两个类相等,这里对应Object类里的两个方法:getHashCode()和equals()

因此,要想使HashMap按照我们的意思去比较两个对象一不一样,不仅要重写equals方法, 还要重写 getHashCode方法





















  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值