【问题标题】:Java Array of LinkedLists [duplicate]链表的 Java 数组 [重复]
【发布时间】:2013-04-06 06:00:14
【问题描述】:

为什么

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

【问题讨论】:

  • 每天都有同样的问题.. 您是否尝试在这里阅读收藏指南或查看泛型标签?
  • 您没有注意到我的代码与您刚刚引用的线程中的代码完全相同吗?是的,我尽我最大的努力阅读了 subjet,但这似乎是一个相对较小的错误,确实如此,NPE 做得很好,至少为我指明了正确的方向
  • 好的,我现在看到,该线程的接受答案具有相同的东西,但我略过它,因为它有一半的答案是关于将数组转换为 LinkedLists,我的错我想,事情何时开始失败并不总是那么容易判断
  • “但给我关于原始类型的运行时错误” 没有“关于原始类型的运行时错误”。在运行时一切都是原始的。
  • 好吧,我不知道你所说的交互窗格是什么,我只是想说我在运行它们时遇到了那个错误,那么类型错误?

标签: java generics


【解决方案1】:

这是由于 'erasure' 的问题(正如您所说的那样,这是“家庭作业”,我强烈建议您阅读该主题:您将学到令人着迷的东西!)本质上涉及到当他们引入泛型时,他们必须在运行时保持与现有非泛型代码的兼容性。

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

最好使用ArrayList&lt;String&gt;

【讨论】:

    【解决方案2】:

    这段代码:

    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!
    

    您的代码有效。

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

      • 我什至不知道如何实例化它,你能给我举个例子吗? ArrayList> list = new ArrayList>() ??
      • @Connor:查看更新后的答案。
      • 啊,就是这样,我想我可以做到,我正在关闭一些关于链接列表数组的旧帖子,但我想我现在会忘记它们
      猜你喜欢
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 2012-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      • 2020-06-12
      相关资源
      最近更新 更多