所以我正在创建一个使用数组链接列表数组的哈希表。让我花一点时间来解释为什么会这样。
所以我之前通过创建一个Array来实现Hash Tables,并且该数组的每个元素都是一个Linked List。这样,我可以通过首先在数组中搜索散列值,然后搜索这个 LL 的元素,快速查找 450,000 个元素的 LL。我应该补充一点,这是一个学校项目,我不能只使用 java 附带的哈希表。
现在我想做类似的事情......但我有大量需要搜索的数组。这里 LL 的每个元素都是文本文件的一行,它由一个 4 元素数组表示,其中 4 个元素中的每一个都是在输入文件中以制表符分隔的不同字符串。我需要能够快速访问位于每行中的第 2、第 3 和第 4 个字符串,这现在是该数组的一个元素。
所以我想要的是能够创建一个 LL of Arrays 的数组......首先我会找到数组第二个元素的 ascii 值的总和。然后我将使用这个值将整个数组散列到哈希表中。然后当我以后需要找到这个元素时,我会去数组的对应元素,那里有一个数组列表。我将搜索列表中每个数组的第二个值。如果我找到我想要的,那么我返回那个数组,并使用这个数组的第三和第四个元素。
正如我所说,对于 LL 数组,我可以正常工作,但是在里面添加数组的额外维度已经完全让我失望了。我认为这主要是在弄清楚语法,因为我已经成功地初始化了一个 LL 的数组(公共静态 LinkedList[] RdHashLL),所以看起来 Java 在原则上是可以接受的。但是,我不知道如何将元素放入哈希表,以及如何读出它们。
下面是我的链接列表数组的代码,可以正常工作。我只需要帮助让它适用于 LL OF ARRAYS 的阵列!
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;
}
}
我已经做了一些尝试来改变这一点,但是对于 if(HashLL[charSum(s)].contains(s)) 之类的东西,它在 charsum(s) 返回的元素处搜索 LL ......我不知道如何当它是数组而不是字符串的 LL 时让它工作。我已经厌倦了 HashLL[charSum(s)].[1].contains(s)) 和 HashLL[charSum(s)][1].contains(s)) 以及其他各种东西。
Google 搜索“数组的链接列表”(带引号)显示为空的事实并没有帮助。
最后一点。我意识到可能还有另一种数据结构可以满足我的要求,但除非您认为 LL of Arrays 的 Array 是完全没有希望的原因,否则我想让它按原样工作。