Java 实现我的reHash()算法的不同方法
我实现了一个哈希表,没有使用任何内置的java哈希表功能,并且得到了一个编译时错误:Java 实现我的reHash()算法的不同方法,java,Java,我实现了一个哈希表,没有使用任何内置的java哈希表功能,并且得到了一个编译时错误: newHashTable.add(reHashValueIndex, bucket.get(j));//insert values into new table 错误:找不到适合添加的方法(int、String) 我发现字符串的类型与String类型的LinkedList的ArrayList的类型不同,这就是为什么我会出现错误的原因,但我可能需要一些帮助来实现reHash()的另一种方法 public-voi
newHashTable.add(reHashValueIndex, bucket.get(j));//insert values into new table
错误:找不到适合添加的方法(int、String)
我发现字符串的类型与String类型的LinkedList的ArrayList的类型不同,这就是为什么我会出现错误的原因,但我可能需要一些帮助来实现reHash()的另一种方法
public-void-reHash(ArrayList-oldHashTable)
{
ArrayList newHashTable=新的ArrayList(oldHashTable.size()*2);
//在oldHashTable中重新设置值
for(int i=0;i<(oldHashTable.size();i++)//循环old hashTable.size的次数
{
bucket=oldHashTable.get(i);//bucket=oldHashTable处的linkedList
if(bucket!=null)//如果哈希表linkedList bucket元素包含元素
{
for(int j=0;j
新哈希表的类型为ArrayList>。因此,您只能添加链接列表中的对象。您可能想做的是首先重建bucket,然后将其添加到新的哈希表中。像这样的
public void reHash(ArrayList<LinkedList<String>> oldHashTable)
{
ArrayList<LinkedList<String>> newHashTable = new ArrayList(oldHashTable.size()*2);
//rehash values in oldHashTable
for (int i = 0; i < (oldHashTable.size()); i++)//loop old hashTable.size number of times
{
bucket = oldHashTable.get(i);//bucket = linkedList at oldHashTable
if (bucket != null)//if hashTable linkedList bucket element contains elements
{
newBucket = new LinkedList<String>();
for (int j = 0; j < bucket.size(); j++)//loop through it
{
if(bucket.get(j) != null)//looking for items
{
int reHashValueIndex = hash(bucket.get(j)); //rehash element
newBucket.add(reHashValueIndex, bucket.get(j));//insert values into new table at new rehashed index
}
}
}
newHashTable.add(newBucket);
}
//increment expand variable by one
expand++;
}
public-void-reHash(ArrayList-oldHashTable)
{
ArrayList newHashTable=新的ArrayList(oldHashTable.size()*2);
//在oldHashTable中重新设置值
for(int i=0;i<(oldHashTable.size();i++)//循环old hashTable.size的次数
{
bucket=oldHashTable.get(i);//bucket=oldHashTable处的linkedList
if(bucket!=null)//如果哈希表linkedList bucket元素包含元素
{
newBucket=newlinkedlist();
for(int j=0;j
一旦您在第i个存储桶中重新存储第j个字符串,您不应该在rehashValueIndex中为newHashTable获取该存储桶并将该字符串添加到其中吗?或者我遗漏了什么?我认为reHashValueIndex属于newHashTable,而不是newBucket…此外,当你试图在一个特定的非零索引向一个空LinkedList添加一个元素时,它会抛出一个IndexOutOfBounds Exception哇,不知道我是怎么遗漏的。当我需要插入桶时,我正试图插入字符串。我为旧哈希表中的每个元素创建了一个新的bucket,然后将其添加到新表中重新设置的索引中。我需要再多玩几次,但谢谢你!!。
public void reHash(ArrayList<LinkedList<String>> oldHashTable)
{
ArrayList<LinkedList<String>> newHashTable = new ArrayList(oldHashTable.size()*2);
//rehash values in oldHashTable
for (int i = 0; i < (oldHashTable.size()); i++)//loop old hashTable.size number of times
{
bucket = oldHashTable.get(i);//bucket = linkedList at oldHashTable
if (bucket != null)//if hashTable linkedList bucket element contains elements
{
newBucket = new LinkedList<String>();
for (int j = 0; j < bucket.size(); j++)//loop through it
{
if(bucket.get(j) != null)//looking for items
{
int reHashValueIndex = hash(bucket.get(j)); //rehash element
newBucket.add(reHashValueIndex, bucket.get(j));//insert values into new table at new rehashed index
}
}
}
newHashTable.add(newBucket);
}
//increment expand variable by one
expand++;
}