JAVA中HashMap的用法

更新时间:2023-07-12 23:45:37 阅读: 评论:0

首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value
  再来看看HashMap和TreeMap有什么区别。HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
  import java.util.Map;   
import java.util.HashMap;   
import java.util.Set;   
import java.util.HashSet;   
import java.util.Iterator;   
import java.util.Hashtable;   
import java.util.TreeMap;   
class  HashMaps   
{   
      public static void main(String[] args)   
      {   
            Map map=new HashMap();               
            map.put("a", "aaa");   
            map.put("b", "bbb");   
            map.put("c", "ccc");   
            map.put("d", "ddd");   
            Iterator iterator = map.keySet().iterator();               
            while (iterator.hasNext()) {   
            Object key = ();   
            System.out.println("(key) is :"+(key));   
            }         
            Hashtable tab=new Hashtable();               
            tab.put("a", "aaa");   
            tab.put("b", "bbb");   
            tab.put("c", "ccc");   
            tab.put("d", "ddd");   
            Iterator iterator_1 = tab.keySet().iterator();   
            while (iterator_1.hasNext()) {   
              Object key = ();   
              System.out.println("(key) is :"+(key));   
            }           
            TreeMap tmp=new TreeMap();               
            tmp.put("a", "aaa");   
            tmp.put("b", "bbb");   
            tmp.put("c", "ccc");   
            tmp.put("d", "ddd");   
            Iterator iterator_2 = tmp.keySet().iterator();   
            while (iterator_2.hasNext()) {   
            Object key = ();   
演讲的英语>儿童简单折纸            System.out.println("(key) is :"+(key));   
            }                         
      }   
}   
执行完后发现hashmap是没有顺序的,而treemap则是按顺序排列的。
下面进入本文的主题。先举个例子说明一下怎样使用陕西土特产HashMap:
import java.util.*;   
public class Exp1 {   
      public static void main(String[] args){   
          HashMap h1=new HashMap();   
          Random r1=new Random();       
          for(int i=0;i<1000;i++){   
              Integer t=new Int(20));   
              ainsKey(t))   
                    (((t)).count++;   
              el 
                    h1.put(t, new Ctime());   
          }   
          System.out.println(h1);   
      }   
}   
 
class Ctime{   
      int count=1;   
      public String toString(){   
          String(count);   
      }   
学生日程表
在HashMap中通过get()来获取value,通过put()来插入value,ContainsKey()则用来检验对象是否已经存在。可以看出,和ArrayList的操作相比,HashMap除了通过key索引其内容之外,别的方面差异并不大。
  HashMap是基于HashCode的,在所有对象的超类Object中有一个HashCode()方法,但是它和equals方法一样,并不能适用于所有的情况,这样我们就需要重写自己的HashCode()方法。下面就举这样一个例子:
import java.util.*;   
  public class Exp2 {   
      public static void main(String[] args){   
          HashMap h2=new HashMap();   
          for(int i=0;i<10;i++)   
              h2.put(new Element(i), new Figureout());   
          System.out.println("h2:");   
          System.out.println("Get the result for Element:");   
          Element test=new Element(5);   
          ainsKey(test))   
              System.out.println(((test));   
阿氏圆定理          el 
              System.out.println("Not found");   
      }   
}   
class Element{   
      int number;   
      public Element(int n){   
          number=n;   
      }   
}   
class Figureout{   
      Random r=new Random();   
      boolean Double()>0.5;   
      public String toString(){   
          if(possible)   
              return "OK!";   
          el 
              return "Impossible!";   
      }    华为手机怎么锁屏
}
在这个例子中,Element用来索引对象Figureout,也即ElementkeyFigureoutvalue。在Figureout中随机生成一个浮点数,如果它比0.5大,打印"OK!",否则打印"Impossible!"。之后查看Element(5)急转弯对应的Figureout结果如何。
结果却发现,无论你运行多少次,得到的结果都是"Not found"。也就是说索引Element(5)并不在HashMap中。这怎么可能呢?
原因得慢慢来说:ElementHashCode方法继承自Object,而Object中的HashCode方法返回的HashCode对应于当前的地址,也就是说对于不同的对象,即使它们的内容完全相同,用谏议大夫HashCode()返回的值也会不同。这样实际上违背了我们的意图。因为我们在使用HashMap时,希望利用相同内容的对象索引得到相同的目标对象,这就需要HashCode()在此时能够返回相同的值。在上面的例子中,我们期望new Element(i) (i=5) Element test=new Element(5)是相同的,而实际上这是两个不同的对象,尽管它们的内容相同,但它们在内存中的地址不同。因此很自然的,上面的程序得不到我们设想的结果。下面对Element类更改如下: 

本文发布于:2023-07-12 23:45:37,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1079091.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:对象   结果   得到   内容   方法
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图