Каков наилучший способ получить значение из java.util.Collection по индексу?
Лучший способ получить ценность из коллекции по индексу
Ответ 1
Ты не должен. Collection избегает говорить об индексах конкретно, потому что это может не иметь смысла для конкретной коллекции. Например, List подразумевает некоторую форму упорядочения, а Set - нет.
Collection<String> myCollection = new HashSet<String>();
myCollection.add("Hello");
myCollection.add("World");
for (String elem : myCollection) {
    System.out.println("elem = " + elem);
}
System.out.println("myCollection.toArray()[0] = " + myCollection.toArray()[0]);
дает мне:
elem = World
elem = Hello
myCollection.toArray()[0] = World
в то время:
myCollection = new ArrayList<String>();
myCollection.add("Hello");
myCollection.add("World");
for (String elem : myCollection) {
    System.out.println("elem = " + elem);
}
System.out.println("myCollection.toArray()[0] = " + myCollection.toArray()[0]);
дает мне:
elem = Hello
elem = World
myCollection.toArray()[0] = Hello
Почему ты хочешь это сделать? Не могли бы вы просто перебрать коллекцию?
Ответ 2
В общем, нет хорошего способа, так как Collection не имеют фиксированных индексов. Да, вы можете выполнять итерацию через них, как работает функцияArray (и другие функции). Но порядок итераций не обязательно фиксирован, и если вы пытаетесь индексировать общую коллекцию, вы, вероятно, делаете что-то неправильно. Было бы более целесообразно индексироваться в List.
Ответ 3
Я согласен с ответом Matthew Flaschen и просто хотел показать примеры вариантов для случая, когда вы не можете переключиться на List (потому что библиотека возвращает вам коллекцию):
List list = new ArrayList(theCollection);
list.get(5);
или
Object[] list2 = theCollection.toArray();
doSomethingWith(list[2]);
Если вы знаете, какие дженерики я могу предоставить образцы для этого тоже.
Изменить: Еще один вопрос, что такое намерение и семантика исходной коллекции.
Ответ 4
Я согласен, что это вообще плохая идея. Тем не менее, Commons Collections была хорошая процедура для получения значения по индексу, если вам действительно нужно:
Ответ 5
Вы должны либо обернуть свою коллекцию в список (new ArrayList(c)), либо использовать c.toArray(), поскольку коллекции не имеют понятия "индекс" или "порядок".
Ответ 6
Преобразовать коллекцию в массив с помощью функции
Object[] toArray(Object[] a) 
		Ответ 7
Вы определенно хотите список List:
Интерфейс List предоставляет четыре метода для позиционного (индексированного) доступа к элементам списка. Списки (например, массивы Java) начинаются с нуля.
Также
Обратите внимание, что эти операции могут выполняться во времени, пропорциональном значению индекса для некоторых реализации (класс LinkedList, например). Таким образом, перебор элементов списка> обычно предпочтительнее индексации, если вызывающий не знает осуществление.
Если вам нужен индекс для изменения вашей коллекции, вы должны заметить, что List предоставляет специальный ListIterator, который позволяет вам получить индекс:
List<String> names = Arrays.asList("Davide", "Francesco", "Angelocola");
ListIterator<String> i = names.listIterator();
while (i.hasNext()) {
    System.out.format("[%d] %s\n", i.nextIndex(), i.next());
}
		Ответ 8
Было бы так же удобно просто конвертировать вашу коллекцию в список всякий раз, когда она обновляется. Но если вы инициализируете, этого будет достаточно:
for(String i : collectionlist){
    arraylist.add(i);
    whateverIntID = arraylist.indexOf(i);
}
Будьте непредубежденными.
Ответ 9
использовать для каждого цикла...
ArrayList<Character> al = new ArrayList<>();    
String input="hello";
for (int i = 0; i < input.length(); i++){
    al.add(input.charAt(i));
}
for (Character ch : al) {               
    System.Out.println(ch);             
}
		Ответ 10
Вы можете получить значение из коллекции, используя цикл for-each или интерфейс итератора. Для коллекции c 
for (<ElementType> elem: c)
System.out.println(elem);
или используя интерфейс итератора
 Iterator it = c.iterator(); 
        while (it.hasNext()) 
        System.out.println(it.next());