所以我創建了一個使用數組鏈表的數組哈希表。讓我花一秒鐘來解釋這是爲什麼。哈希表數組鏈表的鏈表陣列
所以我以前通過創建一個數組來實現哈希表,並且數組的每個元素都是一個鏈表。通過這種方式,我可以通過首先在數組中搜索哈希值並搜索此LL的元素來快速查找450,000個元素的LL。我應該補充說,這是一個學校項目,我不能只使用Java附帶的哈希表。
現在我想要做類似的事情......但我有很多LL需要搜索的陣列。這裏LL的每個元素都是一個文本文件的行,由4個元素的數組表示,其中每個元素是一個不同的字符串,它是在輸入文件中製表符分隔的。我需要能夠快速訪問位於每行中的第2,3和4個字符串,並且該字符串現在是此數組的一個元素。
所以我想要的是能夠創建陣列的LL陣列...首先我會找到一個數組的第二個元素的ASCII值的總和。然後我會用Hash Table將這個值整個數組散列。然後,當我以後需要找到這個元素時,我將轉到數組的相應元素,其中我有一個數組列表。我將搜索列表中每個數組的第二個值。如果我找到了我想要的那個,那麼我返回該數組,然後使用此數組的第3個和第4個元素。
正如我所說,我對LL的一個數組工作正常,但添加陣列的額外維度已完全拋出我。我認爲它主要只是搞清楚語法,因爲我已經成功地初始化了一個LL數組的數組(公共靜態LinkedList [] RdHashLL),所以看起來Java本身就可以。但是,我不知道如何將元素放入哈希表中,以及如何將它們讀出。
下面是我的代碼爲一連串的列表,作品精細。我只需要幫助讓它工作的陣列陣列!
public class TableOfHash{
public static LinkedList<String>[] HashLL;
//HASH FUNCTION - Finds sum of ascii values for string
public static int charSum(String s){
int hashVal = 0;
int size = 1019; //Prime Number around size of 8 char of 'z', (8 chars is amoung largest consistantly in dictionary)
for(int i = 0; i < s.length(); i++){
hashVal += s.charAt(i);
}
return hashVal % size;
}
//CREATE EMPTY HASH TABLE - Creates an array of LL
public static void makeHash(){
HashLL = new LinkedList[1019];
for(int i=0; i<HashLL.length; i++){
HashLL[i] = new LinkedList<String>();
}
}
//HASH VALUES INTO TABLE!
public static void dictionary2Hash(LinkedList<String> Dict){
for(String s : Dict){
HashLL[charSum(s)].add(s);
//Finds sum of char vales of dictionary element i,
//and then word at i to the HashLL at point defined
//by the char sum.
}
//Print out part of Hash Table (for testing! for SCIENCE!)
//System.out.println("HASH TABLE::");
//printHashTab();
}
//SEARCH HashTable for input word, return true if found
public boolean isWord(String s){
if(HashLL[charSum(s)].contains(s)){
wordsfound++;
return true;
}
return false;
}
}
我已經做了一些嘗試來改變這一點,但對於像如果(HashLL [charSum(S)]。包含(S)),其搜索在所述元件中的LL通過charsum返回(s)...我不知道如何在它是一個LL數組而不是字符串的時候讓它工作。我厭倦了HashLL [charSum(s)] [1] .contains(s))和HashLL [charSum(s)] [1] .contains(s))以及其他各種各樣的東西。
谷歌搜索「陣列鏈接列表」(帶引號)變爲空的事實並沒有幫助。
最後一位。我意識到可能會有另一種數據結構可以做我想做的事情,但是除非你相信一組LL陣列是完全沒有希望的,否則我想讓它按原樣工作。
你在找'LinkedList [] hashLL;'? –
jlordo
你可以使用谷歌番石榴庫這種數據結構 –
我可以初始化它作爲公共靜態LinkedList [] RdHashLL,但它得到它在功能上工作與添加值和搜索值我無法去工作。 –