Использование имени переменной в качестве индекса массива - PullRequest
0 голосов
/ 22 марта 2009

У меня есть несколько файлов, которые я помещаю в массив. Я перемешиваю файлы, чтобы они могли отображаться в случайном порядке. Как узнать, что индекс массива 0 на самом деле image1.txt или image2.txt или image3.txt? Заранее спасибо.

String[] a = {"image1.txt","image2.txt","image3.txt"};
List<String> files = Arrays.asList(a);
Collections.shuffle(files); 

Ответы [ 2 ]

3 голосов
/ 22 марта 2009

Я не уверен, что вы пытаетесь сделать.

Чтобы получить доступ к первому элементу перетасованного списка, используйте files.get(0).

Если вы хотите знать, куда ушел каждый элемент, я предлагаю вам по-другому к нему подойти. Создайте список целых чисел от 0 до a.length() - 1 включительно и перемешайте этот список. Затем вручную перестановите массив a в новую коллекцию.

0 голосов
/ 22 марта 2009

НЕПРАВИЛЬНО - см. Объяснение

Примечание: Arrays.asList () создаст НОВЫЙ список с содержимым переданного массива. Исходный массив вообще не будет изменен при использовании Collections.shuffle ().

Объяснение

Питер правильно указал, что Arrays.asList () НЕ делает копию. Возвращенный список «проходной» обратно в исходный массив. Перемешивание списка перетасует содержимое исходного массива. Также стоит отметить, что список является неизменяемым (новые элементы не могут быть добавлены), но обычно я считаю, что использование Arrays.asList () в любом случае включает неизменяемые списки.

files.get(0); // get the first elements in shuffled list, random

// as greg said
int index = files.indexOf(a[0]); // find out where "image1.txt" is in the list
files.get(index); // get "image1.txt" back from the list
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...