2016-05-06 4 views
0

LinkedListからインデックスを取得しようとしているときにエラーが発生しました。次の位置がnullの場合は何かを出力します。Java - (LinkedList.get(var)== null)が機能しません

  int i; 
      int sum; 
      for(i=0; i<list.size();i++){ 
       if(i == 0){ 
        sum = i + 1; 
        if(list.get(sum) == null){ 

         System.out.println("["+list.get(i) +"," + "Null" + "]" + " <-- Cabecera"); 
        } 
        else{ 
        System.out.println("["+list.get(i) +"," + sum + "]" + " <-- Cabecera"); 
        } 

       } 

       else { 
       sum = i + 1; 
        if(list.get(sum) == null){ 
         System.out.println("["+list.get(i) +"," + "Null" + "]"); 
        } 
        else{ 
         System.out.println("["+list.get(i) +"," + sum + "]"); 
        } 

       } 

が、私はこの ERRORた保つ:スレッドの例外を "AWT-EventQueueの-0" java.lang.IndexOutOfBoundsException:インデックス:1、サイズ:1

答えて

3

問題は、この部分です。

sum = i + 1; 
if(list.get(sum) == null){ 

ifor文のループ条件によって、有効な指標であることが保証され、 しかしi + 1ではありません。 ilist.size() - 1(最後の要素のインデックス)に等しい場合、 IndexOutOfBoundsException、 がリストの最後を超えてアクセスしているため、

Btwの場合、getメソッドはリンクリストでは効率的ではありません。 for-eachループを使用するようにコードをリファクタリングするか、効率的なランダムアクセスを持つリスト実装(ArrayListなど)に変更する必要があります。

+0

したがって、私は任意の位置outOfBoundsを取得しようとすると、null値のように動作しませんか?存在しないもの? – BrianCas

+0

@BrianCasそうです。範囲外にアクセスするとnullが返されず、例外がスローされます。これは配列とリストの動作です。多分あなたは地図と混同します。存在しないマップからキーを取得しようとすると、nullが返されます。これについてはjavadocで読むことができます。 – janos

+0

@BrianCasいいえ。[get(int index) '](https://docs.oracle.com/javase/8/docs/api/java/util/List.html#get- int *)メソッド:* 'IndexOutOfBoundsException'をスローする - インデックスが'(index <0 || index> = size()) 'の範囲外の場合* – Andreas

関連する問題