如何列出元素保持顺序并反向迭代?

问题描述 投票:0回答:3

Java中最好的列表/集合/数组结合了以下几个方面:

  • 维持添加元素的顺序
  • 尽可能向前和向后迭代
  • 当然有好的表现

我想到了一个 LinkedList,然后我可以通过

add(0, element)
插入元素,这将模拟相反的顺序。大多数时候我会使用向后迭代,所以使用它我可以只迭代槽。 如果没有,我可以
list.listIterator().hasPrevious()

但是有更好的方法吗?

java data-structures collections linked-list
3个回答
0
投票

ArrayList 可能是你最好的选择。您可以通过以下方式迭代它:

for (ListIterator it = list.listIterator(list.size()); it.hasPrevious();) {
    Object value = it.previous();
}

LinkedList 可以工作,但它会产生更多的对象创建开销,因为您需要为存储的每个元素实例化一个 Link。


0
投票

如果您可以通过索引获取并希望迭代集合,那么您可以使用

List
get(index)
允许您获取列表中该位置的对象。数组允许您执行此操作,您可以像平常一样引用索引,但是如果您的数组可能会增长,那么集合将更易于使用。

您可以使用

List.size()
循环来使用
for
和元素通过对象,而不是使用
Iterator
对象,这将允许您向前和向后迭代列表。例如:

List<AnObject> myList = new ArrayList<AnObject>;
// Add things to the list

for (int i = 0 ; i < myList.size; i++) {
  AnObject myObject = myList.get(i);
} 

for (int i = myList.size()-1 ; i <= 0 ; i--) {
  AnObject myObject = myList.get(i);
}    

Set 不适用,因为 Set 不维护排序。


0
投票

ArrayList
是Java中一种高效、常用的列表数据结构,通常是Java程序中最常用的可变列表类型。除非您需要更具体的列表类型提供的功能,或者正在创建固定的不可变列表(在这种情况下,
List.of
方法可能会更好),否则我建议
ArrayList

从 Java 21 开始,任何

List
的反向视图都可以使用该对象的
reversed
方法获得。这可用于向后迭代列表。

List<String> list = new ArrayList<>(List.of(1, 2, 3));

list.forEach(e -> System.out::println); // Forwards iteration
list.reversed().forEach(e -> System.out::println); // Backwards iteration
© www.soinside.com 2019 - 2024. All rights reserved.