How to properly define an array of linked list in Java ? [duplicate]

萝らか妹 提交于 2019-12-03 14:31:19

This is a proper way to create an array:

@SuppressWarnings("unchecked") LinkedList<Long> [] hashtable = new LinkedList[10];

Cannot Create Arrays of Parameterized Types

You cannot create arrays of parameterized types. For example, the following code does not compile:

List<Integer>[] arrayOfLists = new List<Integer>[2];  // compile-time error

The following code illustrates what happens when different types are inserted into an array:

Object[] strings = new String[2];
strings[0] = "hi";   // OK
strings[1] = 100;    // An ArrayStoreException is thrown.

If you try the same thing with a generic list, there would be a problem:

Object[] stringLists = new List<String>[];  // compiler error, but pretend it's allowed
stringLists[0] = new ArrayList<String>();   // OK
stringLists[1] = new ArrayList<Integer>();  // An ArrayStoreException should be thrown,
                                            // but the runtime can't detect it.

If arrays of parameterized lists were allowed, the previous code would fail to throw the desired ArrayStoreException.

Taken from docs.oracle.com

So what can I store in hashtable[] ?

Does it mean I am now allowed to have a linked list of string in the hashtable[0] and a linked list of Long in hashtable1, if I do LinkedList [] hashtable = new LinkedList[10]?

No, compiler won't allow you to store LinkedList to the hashtable array directly. Following snippet won't compile:

hashtable[0] = new LinkedList<String>();

However you can store the LinkedList without type parameters, or even a subclass of LinkedList:

@SuppressWarnings("unchecked") LinkedList<Long>[] hashtable = new LinkedList[10];

hashtable[0] = new LinkedList<Long>();
hashtable[1] = new MyLinkedList<Long>();
hashtable[2] = new LinkedList();
hashtable[3] = new MyLinkedList();

You can store the LinkedList if you cast your array to LinkedList[]. However you won't be able to store the anything else but a LinkedList:

LinkedList[] rawHashTable = hashtable;
rawHashTable[4] = new LinkedList<String>();

Object[] objectHashTable = rawHashTable;
objectHashTable[5] = "This line will throw an ArrayStoreException ";
Tahmid Nips

First of all define the array size where each element is a LinkedList.

LinkedList<Long> hashTable[] = new LinkedList[10];

Now since each element in the array is a LinkedList itself and all of them are null each of them needs to be initialized. Hence,

for (int i=0;i<10;i++)
        hashTable[i] = new LinkedList<Long>();

If you want to add data to a list, then do it like this:

hashTable[i].add(YOUR_LONG_DATA_HERE);

and finally to iterate,

for (int i=0;i<10;i++){
        for (Long j: hashTable[i])
            System.out.println(j);
}

If you need a list/array of LinkedList, you could use an ArrayList to hold the collection with an initial size of 10.

Here is an alternative approach you could try:

ArrayList<LinkedList<Long>> list = new  ArrayList<LinkedList<Long>>(10);
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!