为什么
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中使用连续元素填充数组中的重复条目。任何想法将不胜感激。
答案 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!
您的代码有效。