java hashtable實現(xiàn)代碼
更新時間:2013年10月14日 15:09:58 作者:
這篇文章介紹了java hashtable實現(xiàn)代碼,有需要的朋友可以參考一下
復(fù)制代碼 代碼如下:
public class HashTable{
private String[] name; //關(guān)鍵字
private int sum; //容量
public static void main(String[] args){ //測試
HashTable ht = new HashTable();
ht.add("chenhaitao");
ht.add("zhongcheng");
ht.add("baiyudong");
ht.add("huangshiyao");
ht.add("djflkd");
ht.add("gg");
System.out.println(ht.contains("baiyudong"));
ht.remove("huangshiyao");
System.out.println(ht.contains("huangshiyao"));
ht.print();
}
public HashTable(){ //初始化,初始容量是10個
name = new String[10];
sum = 0;
}
public int hash1(String s){ //哈希函數(shù)
return Math.abs(s.hashCode())%name.length;
}
public int hash2(String s){ //處理沖突的哈希函數(shù)
int result = Math.abs(s.hashCode())%(name.length-1);
System.out.println(s+"--"+result);
if(result%2==0){
return result + 1;
}
return result;
}
public boolean contains(String s){ //哈希表里面是否包含字符串s
int start = hash1(s);
int i = start;
while (name[i] != null){
if(name[i].equals(s)){
return true;
}
i = (i + hash2(s))%name.length;
if(i == start){
return false;
}
}
return false;
}
public void add(String s){
if(sum>=name.length/2){
this.rehash();
}
int start = hash1(s);
int i = start;
while(name[i] != null){
if(s.equals(name[i])){
return;
}
i = (i + hash2(s))%name.length;
if(i == start){
return;
}
}
name[i] = s;
sum ++;
}
public void rehash(){ //擴建一個哈希表為原表的兩倍,把原來的哈希表添加到新表中
HashTable ht = new HashTable();
ht.name = new String[this.name.length * 2];
for(int i = 0; i < this.name.length; i ++){
if((this.name[i] != null)){
ht.add(this.name[i]);
}
}
this.name = ht.name;
this.sum = ht.sum;
}
public void remove(String s){ //刪除某個元素
if(this.contains(s)){
int i = this.getValue(s);
this.name[i] = null;
}
}
public int getValue(String s){ //得到s在哈希表中的位置
int start = this.hash1(s);
int i = start;
while(this.name[i] != null){
if(this.name[i].equals(s)){
return i;
}
i = (i + this.hash2(s))%this.name.length;
if(i == start){
return -1;
}
}
return -1;
}
public void print(){ //輸出哈希表中所有元素
for(int i = 0; i < name.length; i ++){
System.out.println(i+":"+name[i]);
}
}
public int size(){ //哈希表存儲元素的個數(shù)
return this.sum;
}
public int length(){ //哈希表的長度
return this.name.length;
}
}
您可能感興趣的文章:
- java 中遍歷取值異常(Hashtable Enumerator)解決辦法
- Java中HashTable和HashMap的區(qū)別_動力節(jié)點Java學院整理
- Java容器HashMap與HashTable詳解
- java HashMap和HashTable的區(qū)別詳解
- java使用Hashtable過濾數(shù)組中重復(fù)值的方法
- Java中Hashtable類與HashMap類的區(qū)別詳解
- Java中HashMap和Hashtable的區(qū)別淺析
- java中vector與hashtable操作實例分享
- Java中HashMap和Hashtable及HashSet的區(qū)別
- 淺析Java中Map與HashMap,Hashtable,HashSet的區(qū)別
- 詳解Java中的HashTable
相關(guān)文章
SpringBoot整合RocketMq實現(xiàn)分布式事務(wù)
這篇文章主要為大家詳細介紹了SpringBoot整合RocketMq實現(xiàn)分布式事務(wù)的相關(guān)知識,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下2024-11-11
springboot 同時啟用http/https的配置方法
本文給大家分享springboot 同時啟用http/https的配置方法,通過修改配置文件、增加java配置的方法來實現(xiàn)此操作,具體內(nèi)容詳情跟隨小編通過本文學習下吧2021-05-05
使用java springboot設(shè)計實現(xiàn)的圖書管理系統(tǒng)(建議收藏)
這篇文章主要介紹了使用java springboot設(shè)計實現(xiàn)的圖書管理系統(tǒng),包含了整個的開發(fā)過程,以及過程中遇到的問題和解決方法,對大家的學習和工作具有借鑒意義,建議收藏一下2021-08-08
springboot+vue+elementsUI實現(xiàn)分角色注冊登錄界面功能
這篇文章主要給大家介紹了關(guān)于springboot+vue+elementsUI實現(xiàn)分角色注冊登錄界面功能的相關(guān)資料,Spring?Boot和Vue.js是兩個非常流行的開源框架,可以用來構(gòu)建Web應(yīng)用程序,需要的朋友可以參考下2023-07-07
Java實現(xiàn)經(jīng)典游戲復(fù)雜迷宮
這篇文章主要介紹了如何利用java語言實現(xiàn)經(jīng)典《復(fù)雜迷宮》游戲,文中采用了swing技術(shù)進行了界面化處理,感興趣的小伙伴可以動手試一試2022-02-02

