一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - java中哈希表及其應(yīng)用詳解

java中哈希表及其應(yīng)用詳解

2019-12-21 14:57hebedich JAVA教程

Java中哈希表(Hashtable)是如何實現(xiàn)的呢?Hashtable中有一個內(nèi)部類Entry,用來保存單元數(shù)據(jù),我們用來構(gòu)建哈希表的每一個數(shù)據(jù)是Entry的一個實例。假設(shè)我們保存下面一組數(shù)據(jù),第一列作為key, 第二列作為value。

哈希表也稱為散列表,是用來存儲群體對象的集合類結(jié)構(gòu)。

什么是哈希表

數(shù)組和向量都可以存儲對象,但對象的存儲位置是隨機(jī)的,也就是說對象本身與其存儲位置之間沒有必然的聯(lián)系。當(dāng)要查找一個對象時,只能以某種順序(如順序查找或二分查找)與各個元素進(jìn)行比較,當(dāng)數(shù)組或向量中的元素數(shù)量很多時,查找的效率會明顯的降低。

一種有效的存儲方式,是不與其他元素進(jìn)行比較,一次存取便能得到所需要的記錄。這就需要在對象的存儲位置和對象的關(guān)鍵屬性(設(shè)為 k)之間建立一個特定的對應(yīng)關(guān)系(設(shè)為 f),使每個對象與一個唯一的存儲位置相對應(yīng)。在查找時,只要根據(jù)待查對象的關(guān)鍵屬性 k 計算f(k)的值即可。如果此對象在集合中,則必定在存儲位置 f(k)上,因此不需要與集合中的其他元素進(jìn)行比較。稱這種對應(yīng)關(guān)系 f 為哈希(hash)方法,按照這種思想建立的表為哈希表。

Java 使用哈希表類(Hashtable)來實現(xiàn)哈希表,以下是與哈希表相關(guān)的一些概念:

•容量(Capacity):Hashtable 的容量不是固定的,隨對象的加入其容量也可以自動增長。
•關(guān)鍵字(Key):每個存儲的對象都需要有一個關(guān)鍵字,key 可以是對象本身,也可以是對象的一部分(如某個屬性)。要求在一個 Hashtable 中的所有關(guān)鍵字都是唯一的。
•哈希碼(Hash Code):若要將對象存儲到 Hashtable 上,就需要將其關(guān)鍵字 key 映射到一個整型數(shù)據(jù),成為 key 的哈希碼。
•項(Item):Hashtable 中的每一項都有兩個域,分別是關(guān)鍵字域 key 和值域 value(存儲的對象)。Key 和 value 都可以是任意的 Object 類型的對象,但不能為空。
•裝填因子(Load Factor):裝填因子表示為哈希表的裝滿程度,其值等于元素數(shù)比上哈希表的長度。

哈希表的使用

哈希表類主要有三種形式的構(gòu)造方法:

    Hashtable(); //默認(rèn)構(gòu)造函數(shù),初始容量為 101,最大填充因子 0.75
    Hashtable(int capacity);
    Hashtable(int capacity,float loadFactor)
哈希表類的主要方法如表 8-6 所示。

表 8-6 哈希表定義的常見方法

 

方法 功能
void clear() 重新設(shè)置并清空哈希表
boolean contains(Object value) 確定哈希表內(nèi)是否包含了給定的對象,若有返回 true,否則返回 false
boolean containsKey(Object key) 確定哈希表內(nèi)是否包含了給定的關(guān)鍵字,若有返回 true,否則返回 false
boolean isEmpty() 確認(rèn)哈希表是否為空,若是返回 true,否則返回 false
Object get(Object key) 獲取對應(yīng)關(guān)鍵字的對象,若不存在返回 null
void rehash() 再哈希,擴(kuò)充哈希表使之可以保存更多的元素,當(dāng)哈希表達(dá)到飽和時,系統(tǒng)自動調(diào)用此方法
Object put(Object key,Object value) 用給定的關(guān)鍵字把對象保存到哈希表中,此處的關(guān)鍵字和元素均不可為空
Object remove(Object key) 從哈希表中刪除與給定關(guān)鍵字相對應(yīng)的對象,若該對象不存在返回 null
int size() 返回哈希表的大小
String toString() 將哈希表內(nèi)容轉(zhuǎn)換為字符串

 

哈希表的創(chuàng)建也可以通過 new 操作符實現(xiàn)。其語句為:

    HashTable has=new HashTable();

例子:

【例 8-12】哈希表的遍歷。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//********** ep8_12.java **********
import java.util.*;
class ep8_12{
  public static void main(String args[]){
    Hashtable has=new Hashtable();
    has.put("one",new Integer(1));
    has.put("two",new Integer(2));
    has.put("three",new Integer(3));
    has.put("four",new Double(12.3));
    Set s=has.keySet();
    for(Iterator<String> i=s.iterator();i.hasNext();){
      System.out.println(has.get(i.next()));
    }
  }
}

運行結(jié)果:

?
1
2
3
4
2
1
3
12.3

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国内精品久久久久久不卡影院 | 国产精品视频久 | 国产一区在线 | 青草国产在线观看 | 男女拍拍拍免费视频网站 | xnxx老师 | 久久精品嫩草影院免费看 | 日本b站一卡二不卡三卡四卡 | 女人pp被扒开流水了 | 69堂最新地域网名 | 8x8拨擦拨擦华人免费 | 亚洲精品第二页 | 大桥未久midd—962在线 | 乌克兰肥熟 | 好紧好爽的午夜寂寞视频 | 2021国产麻豆剧传媒剧情动漫 | 成年人在线播放视频 | xxxxx性中国hd| 国产成人精品免费午夜 | 操女b | 国产女主播在线播放一区二区 | 亚洲精品久久久992KVTV | 亚洲AV无码乱码在线观看浪潮 | 亚洲四虎在线 | 欧美综合另类 | 高清国语自产拍免费视频国产 | 四虎影视库永久在线地址 | 亚洲阿v天堂在线2017 | 午夜国产精品视频 | 亚洲春色综合另类网蜜桃 | 国产福利你懂的 | 亚洲国产货青视觉盛宴 | 韩国美女豪爽一级毛片 | 99精品免费在线 | 精品视频一区二区三区免费 | 亚洲一级特黄 | 精品手机在线1卡二卡3卡四卡 | 娇喘高潮教室h | 美女逼逼喷水 | 闺蜜的样子小说安沁在线阅读 | 男人看片网址 |