2014-01-23 63 views
1

我有此ArrayList數組列表和NULL值

[21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36] 

這種方式創建

for (int i = 0; i < number; i++) { 
     ArrayList.add(21+i); 
} 

在我的代碼,我不得不刪除,有時回來,從一些值不改變的位置其他。我試着用

ArrayList.add(removedValue, null); 

,所以我有這樣的事情

ArrayList = [21, 22, 23, null, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36] 

但這種方式我無法排序與集合的陣列。

還有什麼我可以做的,以解決這個問題,而不會破壞我的數組?

+0

我覺得你不溝通這個問題非常好。一方面你想對arrayList進行排序,另一方面你想對它排序。你試圖解決的問題究竟是什麼? –

+0

@AmirArad:這是一款棋盤遊戲。玩家可以從中挑選卡片並將卡片返回。我的問題是,當一個玩家返回一張卡沒有進入正確的地方,所以我雖然排序數組。我創建了這個Integers的ArrayList,也許這是我的主要問題。 – Akumu

回答

4

您應該實施自己的Comparator<Integer>並對其進行排序。

下面的代碼使用它把2個Integer對象的情況下等於它們中的是null或兩個都是null,從而導致沒有索引的變化的比較器。

Integer[] numbers = new Integer[] { 21, null, 23, 24, 25, 26, 27, 28, 
     29, 30, 31, 32, 33, 34, 35, 36 }; 

ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(numbers)); 

Collections.sort(list, new Comparator<Integer>() { 
    @Override 
    public int compare(Integer arg0, Integer arg1) { 

     if (arg0 == null || arg1 == null) 
      return 0; 
     return arg0 - arg1; 

    } 
}); 
+0

我確認(+1)... – venergiac

+0

這不會幫助我,因爲我的名單會改變。就像我說過的,我不應該改變其他數字的位置。如果我可以改變陣列中的位置,我可以設置一個「-100」的值。 – Akumu

+0

@Akumu所以你天才,你能告訴我一種方法來處理'空'有時像24等有時像34等? – Juvanis

0

你應該看看番石榴lib,有一個很好的解釋,爲什麼你不應該在集合上有任何空。

https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained

使用的一些例子。

public class OptionalInteger { 
    final static Optional<Integer> NULL = Optional.absent(); 

    public static void main(String[] args) { 

     final ArrayList<Optional<Integer>> list = Lists.newArrayList(); 

     for (int i = 21; i < 36; i++) { 
      list.add(Optional.fromNullable(i)); 
     } 

     list.add(10, NULL); 
     list.add(12, NULL); 

     System.out.println(list); 

     Collections.sort(list, new Comparator<Optional<Integer>>() { 

      @Override 
      public int compare(Optional<Integer> o1, Optional<Integer> o2) { 
       if(!o1.isPresent()) 
        return 1; 
       if(!o2.isPresent()) 
        return -1; 
       return o1.get().compareTo(o2.get()); 
      } 
     }); 

     System.out.println(list); 
    } 
} 
0

我建議你重新考慮你的模型。

您關心的是保留列表中的順序,因爲您希望將列表的索引用作關鍵字 - 那麼爲什麼不使用Map或SortedMap呢?您可以使用Enum或某種自定義類型作爲鍵而不是整數。

+0

我不知道如何使用它們,但我會查找它們。感謝您的建議。 – Akumu

0

這種嘗試......

Collections.sort(list, new Comparator<Integer>() { 
     @Override 
     public int compare(Integer arg0, Integer arg1) { 

      if (arg0 != null && arg1 != null) { 
       return arg0.compareTo(arg1); 
      } 
      if (arg0 == null) { 
       return 1; 
      } 
      return -1; 
     } 
    });