0

为什么是

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

StaticError:Bad types in assignment:from raw LinkedList[] to LinkedList<String>[]

LinkedList<String>[] list= (LinkedList<String>[]) new LinkedList[32];
StaticError: Bad types in cast: from raw LinkedList[] to LinkedList<String>[]

都编译但给我关于原始类型的运行时错误?

我需要创建一个 LinkedLists 数组(基本上是一个哈希表......这是家庭作业,所以我不能偏离它太多)。我计划通过使用单独的链接来处理冲突,这只是用 LinkedList 中的顺序元素填充数组中的重复条目。任何想法将不胜感激。

4

3 回答 3

5

在 Java 中,数组和泛型并不能很好地配合。

我知道你说你不能偏离这个设计太多。让你的生活更轻松的轻微ArrayList偏差是使用 an而不是数组:

    List<LinkedList<String>> buckets = new ArrayList<LinkedList<String>>();
    for (int i = 0; i < num_buckets; ++i) {
        buckets.add(new LinkedList<String>());
    }
于 2013-04-13T21:01:33.850 回答
1

这是由于“擦除”的问题(正如您所说的那样,这是“家庭作业”,我强烈建议您阅读该主题:您将学到有趣的东西!)并且本质上与他们引入泛型时的事实有关,他们必须在运行时保持与现有非通用代码的兼容性。

因此,这两个答案(在我输入这个答案时出现)可以解决您的问题(特别是,将符号添加到构造函数调用中)但不会真正解决基本问题(数组和泛型并不真正喜欢每个其他)。

使用 anArrayList<String>会更好。

于 2013-04-13T21:08:31.413 回答
0

这段代码:

import java.util.LinkedList;

public class ArrayOfLinkedLists {

   public static void main( String[] args ) {
      @SuppressWarnings("unchecked")
      LinkedList<String>[] array = new LinkedList[32];
      array[0] = new LinkedList<>();
      array[0].add( "Hello" );
      array[0].add( ", " );
      array[0].add( "World!" );
      for( LinkedList< String > l : array ) {
         if( l != null ) {
            for( String s : l ) {
               System.out.println( s );
            }
         }
      }
   }
}

输出:

Hello
, 
World!

您的代码有效。

于 2013-04-13T21:05:48.447 回答