2011-08-16 18 views
11

Javaでは、ArrayListをシャッフルするには、Collections.shuffle()メソッドが存在することがわかりますが、これはリスト全体をシャッフルします。どのように特定の範囲のArrayListをシャッフルできますか?

にはどうすればメソッドを書くことができます(または誰かがそれを書いて、私にそれを表示することができますか?)次のような:

private ArrayList<AnObject> list; 

/** 
* Shuffles the concents of the array list in the range [start, end], and 
* does not do anything to the other indicies of the list. 
*/ 
public void shuffleArrayListInTheRange(int start, int end) 
+1

です。 :) – Malcolm

答えて

22

使用List.subListCollections.shuffle、次のように:

Collections.shuffle(list.subList(start, end)); 

subListに2番目のインデックスがあるので、endインデックスをシャッフルに含めたい場合はend+1を使用してください)

List.subListのリストのビューを返すので、(シャッフル方法によって)サブリストに加えられた変更も元のリストに影響します。

7

はい - 使用すなわち、List.sublist(start, end)Collections.shuffle()

Collections.shuffle(list.sublist(start, end)); 

sublistは、あなたがそれをシャッフルするときので、あなたが実際のリストをシャッフルするだけ開始までの間と

を終了し、リストの ビューを返します。
2
Collections.shuffle(list.subList(start, end+1)); 

終了インデックスがsubList()であるため、+1に注意してください。

0

それはほとんど同じことを言っ4の答えを見ることがむしろ驚くほど簡単な

public void shuffleArrayListInTheRange(int start, int end) { 
    Collections.shuffle(list.subList(start, end)); 
} 
+0

ダー、私は遅刻だ! :( – adarshr

関連する問題