두 개의 arraylist가 filelist
있고 imgList
서로 관련되어 있습니다 (예 : “e1.jpg”와 관련된 “H1.txt”). imgList
의 무작위 화에 따라 목록을 자동으로 무작위 화하는 방법 은 fileList
무엇입니까? Excel에서와 같이 특정 열을 정렬하면 다른 열이 자동으로 따라갑니다?
String [] file = {"H1.txt","H2.txt","H3.txt","M4.txt","M5.txt","M6.txt"};
ArrayList<String> fileList = new ArrayList<String>(Arrays.asList(file));
String [] img = {"e1.jpg","e2.jpg","e3.jpg","e4.jpg","e5.jpg","e6.jpg"};
ArrayList<String> imgList = new ArrayList<String>(Arrays.asList(img));
//randomized files
Collections.shuffle(fileList);
무작위 화 후 출력 예 :
fileList = {"M4.txt","M6.txt","H3.txt","M5.txt","H2.txt","H1.txt"};
의도 된 출력 :
imgList = {"e4.jpg","e6.jpg","e3.jpg","e5.jpg","e2.jpg","e1.jpg"};
답변
동일한 시드 Collections.shuffle()
로 두 Random
객체가 초기화 된 상태에서 두 번 사용하십시오 .
long seed = System.nanoTime();
Collections.shuffle(fileList, new Random(seed));
Collections.shuffle(imgList, new Random(seed));
Random
시드가 같은 두 객체를 사용하면 두 목록이 정확히 같은 방식으로 섞입니다. 이를 통해 두 개의 개별 컬렉션이 가능합니다.
답변
단일 배열 또는 List
해당 객체로 끝날 수 있도록 다른 클래스로 래핑하십시오 .
public class Data {
private String txtFileName;
private String imgFileName;
// Add/generate c'tor, getter/setter, equals, hashCode and other boilerplate.
}
사용 예 :
List<Data> list = new ArrayList<Data>();
list.add(new Data("H1.txt", "e1.jpg"));
list.add(new Data("H2.txt", "e2.jpg"));
// ...
Collections.shuffle(list);
답변
가장 간단한 방법은 두 값을 이미지와 파일이 모두 포함 된 유형으로 캡슐화하는 것입니다. 그런 다음 구축 ArrayList
의 그것을 하고 셔플.
캡슐화도 향상되어 이미지와 항상 같은 수의 파일을 자동으로 가질 수있는 속성을 제공합니다.
당신이 경우 대안 정말 그 생각이 마음에 들지는 (이 수정의 많은 예이다 셔플 코드를 직접 작성하는 것입니다 피셔 – 예이츠 셔플 의심 스택 오버플로 I에 대한 몇 가지를 포함하여, 자바)과에서 두 목록에서 작동 단지 동시. 그러나 나는 “개선 캡슐화”접근 방식을 사용하는 것이 좋습니다.
답변
지도를 사용하여이 작업을 수행 할 수 있습니다.
Map<String, String> fileToImg:
List<String> fileList = new ArrayList(fileToImg.keySet());
Collections.shuffle(fileList);
for(String item: fileList) {
fileToImf.get(item);
}
이것은 무작위 순서로 이미지를 반복합니다.
답변
셔플 방법을 사용하여 수행 할 수 있습니다.
private List<Integer> getJumbledList() {
List<Integer> myArrayList2 = new ArrayList<Integer>();
myArrayList2.add(8);
myArrayList2.add(4);
myArrayList2.add(9);
Collections.shuffle(myArrayList2);
return myArrayList2;
답변
두 개의 문자열 배열 대신 두 개의 문자열을 포함하는 사용자 정의 클래스의 배열 하나를 갖습니다.
답변
0에서 5까지의 숫자를 포함하는 배열을 만들어 섞을 수 있습니다. 그런 다음 결과를 “oldIndex-> newIndex”의 맵핑으로 사용하고이 맵핑을 두 원래 배열에 적용하십시오.