亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? hashmap.txt

?? 有關java中hashMap的整理
?? TXT
字號:
HashMap 使用小結
 
本文重點介紹HashMap。首先介紹一下什么是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 = iterator.next();
               System.out.println("map.get(key) is :"+map.get(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 = iterator_1.next();
               System.out.println("tab.get(key) is :"+tab.get(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 = iterator_2.next();
               System.out.println("tmp.get(key) is :"+tmp.get(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 Integer(r1.nextInt(20));
               if(h1.containsKey(t))
                      ((Ctime)h1.get(t)).count++;
               else
                      h1.put(t, new Ctime());
            }
            System.out.println(h1);
       }
}

class Ctime{
     int count=1;
     public String toString(){
          return Integer.toString(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);
          if(h2.containsKey(test))
                 System.out.println((Figureout)h2.get(test));
          else
                 System.out.println("Not found");
       }
}

class Element{
     int number;
     public Element(int n){
            number=n;
       } 
}

class Figureout{
       Random r=new Random();
     boolean possible=r.nextDouble()>0.5;
     public String toString(){
          if(possible)
               return "OK!";
          else
               return "Impossible!";
       }
}


在這個例子中,Element用來索引對象Figureout,也即Element為key,Figureout為value。在Figureout中隨機生成一個浮點數,如果它比0.5大,打印"OK!",否則打印"Impossible!"。之后查看Element(3)對應的Figureout結果如何。

結果卻發現,無論你運行多少次,得到的結果都是"Not found"。也就是說索引Element(3)并不在HashMap中。這怎么可能呢?

原因得慢慢來說:Element的HashCode方法繼承自Object,而Object中的HashCode方法返回的HashCode對應于當前的地址,也就是說對于不同的對象,即使它們的內容完全相同,用HashCode()返回的值也會不同。這樣實際上違背了我們的意圖。因為我們在使用HashMap時,希望利用相同內容的對象索引得到相同的目標對象,這就需要HashCode()在此時能夠返回相同的值。在上面的例子中,我們期望new Element(i) (i=5)與 Element test=new Element(5)是相同的,而實際上這是兩個不同的對象,盡管它們的內容相同,但它們在內存中的地址不同。因此很自然的,上面的程序得不到我們設想的結果。下面對Element類更改如下:

class Element{
     int number;
     public Element(int n){
            number=n;
       } 
     public int hashCode(){
            return number;
       }
     public boolean equals(Object o){
          return (o instanceof Element) && (number==((Element)o).number);
       }
}

在這里Element覆蓋了Object中的hashCode()和equals()方法。覆蓋hashCode()使其以number的值作為hashcode返回,這樣對于相同內容的對象來說它們的hashcode也就相同了。而覆蓋equals()是為了在HashMap判斷兩個key是否相等時使結果有意義(有關重寫equals()的內容可以參考我的另一篇文章《重新編寫Object類中的方法 》)。修改后的程序運行結果如下:

h2:
Get the result for Element:
Impossible!

請記住:如果你想有效的使用HashMap,你就必須重寫在其的HashCode()。

還有兩條重寫HashCode()的原則:

不必對每個不同的對象都產生一個唯一的hashcode,只要你的HashCode方法使get()能夠得到put()放進去的內容就可以了。即"不為一原則"。 
生成hashcode的算法盡量使hashcode的值分散一些,不要很多hashcode都集中在一個范圍內,這樣有利于提高HashMap的性能。即"分散原則"。 
至于第二條原則的具體原因,有興趣者可以參考Bruce Eckel的《Thinking in Java》,在那里有對HashMap內部實現原理的介紹,這里就不贅述了。

掌握了這兩條原則,你就能夠用好HashMap編寫自己的程序了。不知道大家注意沒有,java.lang.Object中提供的三個方法:clone(),equals()和hashCode()雖然很典型,但在很多情況下都不能夠適用,它們只是簡單的由對象的地址得出結果。這就需要我們在自己的程序中重寫它們,其實java類庫中也重寫了千千萬萬個這樣的方法。利用面向對象的多態性——覆蓋,Java的設計者很優雅的構建了Java的結構,也更加體現了Java是一門純OOP語言的特性。
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费的国产精品| 奇米四色…亚洲| 亚洲第一电影网| 韩国一区二区视频| 91黄色在线观看| 中文子幕无线码一区tr| 国产欧美日韩精品在线| 亚洲欧美偷拍另类a∨色屁股| 亚洲高清免费在线| 成人一区在线观看| 欧美mv日韩mv| 三级亚洲高清视频| 色天使色偷偷av一区二区 | 亚洲国产一二三| 丁香六月综合激情| 欧美成人一区二区三区片免费| 一区二区三区中文字幕在线观看| 国产精品1区2区| 久久综合久色欧美综合狠狠| 日本在线不卡一区| 9191国产精品| 午夜欧美视频在线观看| 欧美日韩一区二区三区在线看 | 亚洲一区二区视频在线| 国产激情一区二区三区四区| 日韩欧美www| 日韩专区中文字幕一区二区| 欧美最新大片在线看| 亚洲日本成人在线观看| va亚洲va日韩不卡在线观看| 一区视频在线播放| av亚洲精华国产精华精华| 亚洲国产精华液网站w| 成人精品国产福利| 一区二区中文字幕在线| av一区二区久久| 亚洲少妇30p| 在线观看国产一区二区| 亚洲综合色自拍一区| 欧美日韩国产首页| 男人的j进女人的j一区| 亚洲日本护士毛茸茸| 久久9热精品视频| 精品福利二区三区| 国产一区二区三区久久久| 久久精品一区二区三区不卡牛牛| 国产99精品视频| 国产精品精品国产色婷婷| 91国产福利在线| 日韩成人午夜精品| 久久久国产精华| 99re6这里只有精品视频在线观看| 亚洲日本丝袜连裤袜办公室| 欧美伊人精品成人久久综合97| 五月开心婷婷久久| 久久日韩精品一区二区五区| 免费在线欧美视频| 国产欧美视频一区二区三区| 99精品欧美一区二区蜜桃免费| 亚洲蜜桃精久久久久久久| 91精品在线一区二区| 国内精品免费在线观看| 亚洲欧美一区二区不卡| 欧美一区二区三区公司| eeuss鲁一区二区三区| 91精品国产欧美一区二区18| 天天操天天色综合| 欧美一区二区视频观看视频| 久久不见久久见中文字幕免费| 国产亚洲精品福利| 91久久精品午夜一区二区| 久久精品99国产精品| 成人欧美一区二区三区小说| 在线不卡免费欧美| 成人午夜电影网站| 日韩高清在线不卡| 国产精品水嫩水嫩| 717成人午夜免费福利电影| 国产精品自拍网站| 丝袜诱惑制服诱惑色一区在线观看 | 久久久蜜臀国产一区二区| 在线视频国产一区| 国产精品一线二线三线精华| 亚洲尤物在线视频观看| 久久亚洲一级片| 69堂国产成人免费视频| 99re热视频精品| 国产黄色精品网站| 日韩电影免费在线看| 艳妇臀荡乳欲伦亚洲一区| 欧美韩日一区二区三区| 日韩欧美成人一区| 欧美日韩国产首页| 色欧美日韩亚洲| 99re成人精品视频| 久久精品国产亚洲a| 亚洲一区二区精品视频| 中文字幕亚洲精品在线观看| 久久精品男人天堂av| 国产精品电影一区二区| 欧美成人vr18sexvr| 91精品国产高清一区二区三区| 欧洲精品中文字幕| 97se亚洲国产综合自在线不卡 | 欧美女孩性生活视频| 色综合色狠狠综合色| 成人免费av资源| 国产精品亚洲人在线观看| 久久草av在线| 久久精品国产第一区二区三区| 日韩综合一区二区| 五月婷婷激情综合网| 亚洲sss视频在线视频| 亚洲国产欧美在线| 五月婷婷激情综合网| 丝袜亚洲精品中文字幕一区| 亚洲成a人片在线观看中文| 亚洲一区成人在线| 亚洲在线观看免费| 婷婷六月综合网| 奇米色777欧美一区二区| 乱中年女人伦av一区二区| 日韩av午夜在线观看| 捆绑调教美女网站视频一区| 另类小说欧美激情| 国产精一区二区三区| 成人av在线观| 日本高清无吗v一区| 欧美日韩国产在线播放网站| 91精品久久久久久久99蜜桃| 337p粉嫩大胆色噜噜噜噜亚洲| 精品国产乱码久久| 日本一区二区三区视频视频| 一区精品在线播放| 午夜一区二区三区视频| 蜜臀久久99精品久久久画质超高清| 九九**精品视频免费播放| 国产精品一二三| 色丁香久综合在线久综合在线观看| 91网址在线看| 欧美男同性恋视频网站| 久久综合九色综合欧美就去吻| 欧美高清在线视频| 亚洲国产精品精华液网站| 美女视频黄久久| 9人人澡人人爽人人精品| 欧美综合天天夜夜久久| 精品欧美一区二区久久| 最新国产精品久久精品| 日韩精品一区第一页| 成人综合在线网站| 欧美三级视频在线| 国产欧美日韩精品一区| 亚洲国产综合在线| 国内精品视频666| 欧美性受xxxx黑人xyx性爽| 精品国产sm最大网站免费看| 亚洲女人的天堂| 激情小说欧美图片| 色就色 综合激情| 久久久久久亚洲综合影院红桃 | 色综合久久久久综合体桃花网| 555夜色666亚洲国产免| 亚洲国产激情av| 美女久久久精品| 色综合久久久久久久久久久| 日韩欧美自拍偷拍| 亚洲六月丁香色婷婷综合久久 | 亚洲风情在线资源站| 国产盗摄视频一区二区三区| 欧美日韩五月天| 亚洲欧美视频在线观看| 韩国三级在线一区| 欧美日韩电影在线| 最新欧美精品一区二区三区| 麻豆专区一区二区三区四区五区| 91美女片黄在线观看91美女| 久久综合九色综合欧美98| 亚洲1区2区3区4区| 日本高清免费不卡视频| 国产精品视频在线看| 国产一区二区三区四| 欧美一区二区三区在| 亚洲国产毛片aaaaa无费看| 成人免费va视频| 日本一区二区高清| 国产麻豆9l精品三级站| 成人激情黄色小说| 欧美日韩在线亚洲一区蜜芽| 久久久久久久免费视频了| 亚洲国产婷婷综合在线精品| 99在线精品免费| 国产精品久久久久四虎| 成人精品视频.| 欧美高清在线视频| 成人激情小说乱人伦| 中文字幕成人网| 波多野结衣在线aⅴ中文字幕不卡| 久久蜜臀中文字幕| 国产在线精品国自产拍免费|