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

    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

これは「消去」の問題によるもので (あなたが言うように、これは「宿題」です。このテーマについて読むことを強くお勧めします: 魅力的なことを学ぶことができます!) 本質的には、彼らがジェネリックを導入したときに、実行時に、既存の非汎用コードとの互換性を維持する必要がありました。

したがって、2つの回答(これを入力しているときに表示されました)は問題を解決しますが(特に、コンストラクター呼び出しに表記を追加します)、根本的な問題には実際には対処しません(配列とジェネリックはそれぞれが本当に好きではないということです)他の)。

を使用するArrayList<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 に答える