Java 实现我的reHash()算法的不同方法

Java 实现我的reHash()算法的不同方法,java,Java,我实现了一个哈希表,没有使用任何内置的java哈希表功能,并且得到了一个编译时错误: newHashTable.add(reHashValueIndex, bucket.get(j));//insert values into new table 错误:找不到适合添加的方法(int、String) 我发现字符串的类型与String类型的LinkedList的ArrayList的类型不同,这就是为什么我会出现错误的原因,但我可能需要一些帮助来实现reHash()的另一种方法 public-voi

我实现了一个哈希表,没有使用任何内置的java哈希表功能,并且得到了一个编译时错误:

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++;
    }