程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java中哈希表及其運用詳解

java中哈希表及其運用詳解

編輯:關於JAVA

java中哈希表及其運用詳解。本站提示廣大學習愛好者:(java中哈希表及其運用詳解)文章只能為提供參考,不一定能成為您想要的結果。以下是java中哈希表及其運用詳解正文


哈希表也稱為散列表,是用來存儲群體對象的聚集類構造。

甚麼是哈希表

數組和向量都可以存儲對象,但對象的存儲地位是隨機的,也就是說對象自己與其存儲地位之間沒有必定的接洽。當要查找一個對象時,只能以某種次序(如次序查找或二分查找)與各個元素停止比擬,當數組或向量中的元素數目許多時,查找的效力會顯著的下降。

一種有用的存儲方法,是不與其他元素停止比擬,一次存取便能獲得所須要的記載。這就須要在對象的存儲地位和對象的症結屬性(設為 k)之間樹立一個特定的對應關系(設為 f),使每一個對象與一個獨一的存儲地位絕對應。在查找時,只需依據待核對象的症結屬性 k 盤算f(k)的值便可。假如此對象在聚集中,則一定在存儲地位 f(k)上,是以不須要與聚集中的其他元素停止比擬。稱這類對應關系 f 為哈希(hash)辦法,依照這類思惟樹立的表為哈希表。

Java 應用哈希表類(Hashtable)來完成哈希表,以下是與哈希表相干的一些概念:

•容量(Capacity):Hashtable 的容量不是固定的,隨對象的參加其容量也能夠主動增加。
•症結字(Key):每一個存儲的對象都須要有一個症結字,key 可所以對象自己,也能夠是對象的一部門(如某個屬性)。請求在一個 Hashtable 中的一切症結字都是獨一的。
•哈希碼(Hash Code):若要將對象存儲到 Hashtable 上,就須要將其症結字 key 映照到一個整型數據,成為 key 的哈希碼。
•項(Item):Hashtable 中的每項都有兩個域,分離是症結字域 key 和值域 value(存儲的對象)。Key 和 value 都可所以隨意率性的 Object 類型的對象,但不克不及為空。
•裝填因子(Load Factor):裝填因子表現為哈希表的裝滿水平,其值等於元素數比上哈希表的長度。

哈希表的應用

哈希表類重要有三種情勢的結構辦法:

    Hashtable(); //默許結構函數,初始容量為 101,最年夜填充因子 0.75
    Hashtable(int capacity);
    Hashtable(int capacity,float loadFactor)
哈希表類的重要辦法如表 8-6 所示。

表 8-6 哈希表界說的罕見辦法

辦法 功效 void clear() 從新設置並清空哈希表 boolean contains(Object value) 肯定哈希表內能否包括了給定的對象,如有前往 true,不然前往 false boolean containsKey(Object key) 肯定哈希表內能否包括了給定的症結字,如有前往 true,不然前往 false boolean isEmpty() 確認哈希表能否為空,若是前往 true,不然前往 false Object get(Object key) 獲得對應症結字的對象,若不存在前往 null void rehash() 再哈希,擴大哈希表使之可以保留更多的元素,當哈希表到達飽和時,體系主動挪用此辦法 Object put(Object key,Object value) 用給定的症結字把對象保留到哈希表中,此處的症結字和元素均弗成為空 Object remove(Object key) 從哈希表中刪除與給定症結字絕對應的對象,若該對象不存在前往 null int size() 前往哈希表的年夜小 String toString() 將哈希表內容轉換為字符串

哈希表的創立也能夠經由過程 new 操作符完成。其語句為:

    HashTable has=new HashTable();

例子:

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

//********** 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()));
    }
  }
}

運轉成果:

2
1
3
12.3

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved