Java链接列表数组

时间:2013-04-13 20:59:28

标签: java generics

为什么

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中使用连续元素填充数组中的重复条目。任何想法将不胜感激。

3 个答案:

答案 0 :(得分:5)

在Java中,数组和泛型不能很好地发挥作用。

我知道你说你不能偏离这个设计太多轻微的偏差会让您的生活变得更轻松,那就是使用ArrayList代替数组:

    List<LinkedList<String>> buckets = new ArrayList<LinkedList<String>>();
    for (int i = 0; i < num_buckets; ++i) {
        buckets.add(new LinkedList<String>());
    }

答案 1 :(得分:1)

这是由于' erasure '的问题(正如你所说的“家庭作业”我强烈建议你阅读这个主题:你会学到很有趣的东西!)当他们引入泛型时,他们必须在运行时保持与现有非通用代码的兼容性。

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

最好使用ArrayList<String>

答案 2 :(得分: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!

您的代码有效。