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)文章
使用Java實現(xiàn)將ppt轉(zhuǎn)換為文本
這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)將ppt轉(zhuǎn)換為文本,文中的示例代碼簡潔易懂,具有一定的借鑒價值,有需要的小伙伴可以參考下2024-01-01詳解在idea 中使用Mybatis Generator逆向工程生成代碼
這篇文章主要介紹了在idea 中使用Mybatis Generator逆向工程生成代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12使用TraceId在Spring Cloud中實現(xiàn)線上問題快速定位
在微服務(wù)架構(gòu)中,服務(wù)間的互相調(diào)用使得問題定位變得復(fù)雜,在此背景下,TraceId為我們提供了一個在復(fù)雜環(huán)境中追蹤請求路徑和定位問題的工具,本文不僅介紹TraceId的基本概念,還將結(jié)合真實場景,為您展示如何在Spring Cloud中應(yīng)用它2023-09-09