使用Iterator Java获取列表值

时间:2014-08-18 08:28:18

标签: java list iterator

我试图使用列表迭代器来遍历链表并根据存储在那里的整数值对下一个节点进行一些操作/检查,但是我的代码中出现了一些错误。我想我不理解iterator.next()返回的内容(一些E对象,但我不知道如何从中获取我想要的值)编辑希望我按照说明进行一些转换下面。它消除了错误,但我不知道这是否是一种安全的方法来处理问题,或者它是否具有我正在寻找的行为。请解释为什么我会收到错误,以及是否有一个很好的方法来解决这个问题。

        LinkedList<Integer>[] hash = new LinkedList[list.size()];
        hash = remo.createHash(hash, list.size());
        ListIterator iterator = list.listIterator(0);

        // use the value of the integer stored at the next Node as its hash
        // and add the same value to the linked list at that bucket
        int i = 0;
        while(iterator.hasNext()){
            hash[iterator.next()].add(iterator.next());
            i++;
        }

        // reset iterator to beginning of list
        iterator = list.listIterator(0);

        // if the hash bucket corresponding to the value at that node has more than
        // one item in its list, remove that node from the list.
        while(iterator.hasNext()){
            if(hash[iterator.next()].size()>1){
                iterator.remove(iterator.next());
            }
        }

createHash初始化数组中的每个链表,remo是我的类的实例。

编辑器希望我将iterator.next()强制转换为int hash [iterator.next()],它希望我将它强制转换为.add(iterator.next())。

实施例: 散列[(INT)iterator.next()] 。散列[(int)的iterator.next()]中添加((整数)iterator.next());

2 个答案:

答案 0 :(得分:3)

LinkedList<Integer>[] hash = new LinkedList[list.size()];

由于http://docs.oracle.com/javase/tutorial/java/generics/restrictions.html#createArrays

,此行存在问题
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

Because:

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.

因此,您正在创建一个不使用泛型的列表数组(因为您无法创建参数化类型的数组),因此,它存储了对象(它不知道您的类型和类型) #39;实际上计划存储)。您应该使用ArrayList代替Array来解决此问题,如下所示:

List<List<Integer>> listOfLists = new ArrayList<List<Integer>>(list.size());

//example usage
listOfLists.add(new LinkedList<Integer>()); 
for(List<Integer> currList : listOfLists)
{
     ...
}

答案 1 :(得分:1)

阵列和泛型不混合。只需使用List<List<Integer>>

List<List<Integer>> hash = new LinkedList<List<Integer>>(list.size());