2011-08-16 35 views
11

Trong Java, tôi biết rằng để trộn một ArrayList, phương thức Collections.shuffle() tồn tại, tuy nhiên điều này làm xáo trộn toàn bộ danh sách.Làm thế nào tôi có thể trộn một phạm vi cụ thể của một ArrayList?

Làm thế nào tôi có thể viết một phương pháp (hoặc, có thể một người nào đó viết nó và chỉ cho tôi không?) Như sau:

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

Thay tuyệt vời để thấy bốn câu trả lời nói gần như cùng một điều. :) – Malcolm

Trả lời

22

Sử dụng List.subListCollections.shuffle, như thế này:

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

(Lưu ý rằng chỉ mục thứ hai là subListđộc quyền, vì vậy hãy sử dụng end+1 nếu bạn muốn bao gồm end chỉ mục theo cách trộn.)

List.subList trả lại một chế độ xem của danh sách, các thay đổi được thực hiện (theo phương thức trộn) vào danh sách phụ, cũng sẽ ảnh hưởng đến danh sách gốc.

7

Có - sử dụng List.sublist(start, end)Collections.shuffle() đó, ví dụ:

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

sublist trả về một xem của danh sách, vì vậy khi bạn xào bài, bạn shuffle danh sách thực tế nhưng duy nhất giữa bắt đầu và kết thúc

2
Collections.shuffle(list.subList(start, end+1)); 

Lưu ý +1, vì chỉ mục kết thúc là subList() là độc quyền.

0

Nó đơn giản

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

Duh, tôi đến muộn! :( – adarshr

Các vấn đề liên quan