将对象添加到LinkedList java的数组中

时间:2013-11-27 19:12:01

标签: java arrays hash linked-list populate

所以我正在使用散列并想要创建一个LinkedList数组。如何使用表[index]将新对象添加到LinkedList。这是我到目前为止,但当我尝试调用LinkedList方法添加它不起作用。是因为事先将一切都设置为null吗?我需要手动添加所有内容吗?

private void populateLinkedList(LinkedList<String>[] table, ArrayList<String> dictionary){
    for(String s:dictionary){
        String temp=findHash(s);
        System.out.print(temp + ": ");
        int hashKey=hashFunction(temp);
        Anagram obj=new Anagram(s, temp, hashKey);
                    table[hashKey].add(obj);
    }       
}

populateLinkedList(hashTable, dictionaryList);这就是我调用函数的方式。

2 个答案:

答案 0 :(得分:2)

数组不能具有参数化类型的组件类型,或者我应该说它没用。基本上由于类型擦除,数组的类型是未知的,这会导致数组存储检查失败。

LinkedList<String>[] table导致您的问题。传递给方法的参数不能是LinkedList<String>[]类型,因为它无法在Java中实例化这样的类型。

在IDE中尝试以下行,该行将无法编译:

LinkedList<String>[] list = new LinkedList<String>[];

尝试使用:

List<LinkedList<String>>代替LinkedList<String>[]

请参阅Generic Faq

工作示例

我必须存根一堆方法,但这是一个有效的例子:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ArrayStoreCheck {

    public static void main(String[] args) {
        List<LinkedList<Anagram>> lists = new ArrayList<LinkedList<Anagram>>();
        LinkedList<Anagram> anagrams = new LinkedList<Anagram>();
        lists.add(anagrams);

        List<String> dictionary = new ArrayList<String>();
        dictionary.add("one");
        dictionary.add("two");

        populateLinkedList(lists, dictionary);

        System.out.println(lists.get(0).get(0));
    }

    private static void populateLinkedList(List<LinkedList<Anagram>> table, List<String> dictionary){
        for(String s:dictionary){
            String temp=findHash(s);
            int hashKey=hashFunction(temp);
            Anagram obj=new Anagram(s, temp, hashKey);
            table.get(hashKey).add(obj);
        }       
    }

    //Stub
    private static String findHash(String s){
        return "";
    }

    //Stub
    private static int hashFunction(String s){
        return 0;
    }

    //Stub
    public static class Anagram{

        private String s;

        public Anagram(String s, String t, int key){
            this.s = s;
        }

        @Override
        public String toString() {
            return s;
        }       
    }
}

答案 1 :(得分:0)

你实在无法做到

 int hashKey=hashFunction(temp);
 .... 
 table[hashKey].add(obj);

假设hashKey值可以是MIN到MAX整数值。您只能访问值为0到array.length的数组元素。你有什么例外?

但我认为主要问题是您正在尝试向LinkedList添加Anagram类型,期望String

您肯定需要确保在您尝试访问的任何索引处都有LinkedList的实例。