Я хочу иметь перевернутый вид списка в списке (аналогично List#sublist
представлению списка в списке). Есть ли какая-то функция, которая обеспечивает эту функциональность?
Я не хочу делать какие-либо копии списка или изменять его.
Было бы достаточно, если бы в этом случае я мог получить хотя бы обратный итератор в списке.
Также я знаю, как реализовать это сам. Я просто спрашиваю, предоставляет ли Java что-то подобное.
Демонстрационная реализация:
static <T> Iterable<T> iterableReverseList(final List<T> l) {
return new Iterable<T>() {
public Iterator<T> iterator() {
return new Iterator<T>() {
ListIterator<T> listIter = l.listIterator(l.size());
public boolean hasNext() { return listIter.hasPrevious(); }
public T next() { return listIter.previous(); }
public void remove() { listIter.remove(); }
};
}
};
}
Я только что узнал, что некоторые List
реализации имеют descendingIterator()
то, что мне нужно. Хотя нет вообще такой реализации для List
. Что странно, потому что реализация, которую я видел, LinkedList
достаточно общая, чтобы работать с любым List
.
Collections.reverse(list)
Ответы:
Гуава обеспечивает это: Lists.reverse (Список)
В отличие от
Collections.reverse
этого, это просто представление ... оно не меняет порядок элементов в исходном списке. Кроме того, с исходным списком, который можно изменить, изменения как исходного списка, так и представления отражаются в другом.источник
List
), но без обратного метода. удаление его сделало гуаву доступной снова.ListIterator.previous()
Используйте метод .clone () в своем списке. Он вернет поверхностную копию, что означает, что он будет содержать указатели на те же объекты, поэтому вам не придется копировать список. Тогда просто используйте Коллекции.
Ergo,
Если вы используете
List
и не имеете доступа,clone()
вы можете использоватьsubList()
:источник
clone()
обычно создаст копию списка. Во всяком случае,List#clone()
также не существует.clone()
. Это действительно делает полную копию списка (он не только клонирует каждый отдельный объект в списке, но это никогда не было тем, о чем я говорил).subList
не копирует, он просто обеспечивает представление базового списка, поэтому изменение этого представления полностью изменит базовый список.Если я понял правильно, то это одна строка кода. Это сработало для меня.
источник
Это не совсем элегантно, но если вы используете List.listIterator (int index), вы можете получить двунаправленный ListIterator до конца списка:
источник
Collections.reverse (nums) ... На самом деле это обратный порядок элементов. Ниже код должен быть высоко оценен -
Выход: 15,94,83,42,61
источник
java.util.Deque
естьdescendingIterator()
- если вашList
естьDeque
, вы можете использовать.источник
Я знаю, что это старый пост, но сегодня я искал что-то подобное. В конце концов я сам написал код:
Не рекомендуется для длинных списков, это вообще не оптимизировано. Это своего рода простое решение для контролируемых сценариев (в списках, которые я обрабатываю, не более 100 элементов).
Надеюсь, это кому-нибудь поможет.
источник
Я использую это:
как это:
источник
Вы также можете сделать это:
источник
Вы также можете инвертировать позицию при запросе объекта:
источник
Для небольшого размера списка мы можем создать
LinkedList
и затем использовать нисходящий итератор как:источник
Используйте
reverse(...)
методыjava.util.Collections
класса. Передайте ваш список в качестве параметра, и ваш список будет перевернут.источник