1

Java中是否有支持反向插入的数据结构?我想向数据结构添加值。不知道提前多少。这些值应插入以下行:

datastructure.insert(1); //datastructure is: {1}                 
datastructure.insert(4); //datastructure is: {4,1}       
datastructure.insert(9); //datastructure is: {9,4,1}

最后插入的值应该始终是第一个。哪种数据结构最适合?

4

6 回答 6

5

这称为堆栈。看Stack<E>,方法是push()pop()

于 2013-06-21T11:55:17.853 回答
5

最好的方法是使用Deque 你不应该使用 Stack,除非你有一个非常旧的 Java 版本。Stack btw 将是您需要的相反顺序。

Stack stack = new Stack();
stack.push(1);
stack.push(4);
stack.push(9);
System.out.println("stack: " + stack);
Deque<Integer> deque = new ArrayDeque<>();
deque.addFirst(1);
deque.addFirst(4);
deque.addFirst(9);
System.out.println("deque: " + deque);

印刷

stack: [1, 4, 9]
deque: [9, 4, 1]
于 2013-06-21T11:57:55.690 回答
1

您可以使用java.util.ArrayDeque代替Stack。来自Oracle Java API

Deque 接口及其实现提供了一组更完整和一致的 LIFO 堆栈操作,应优先使用Stack类。例如:

Deque<Integer> stack = new ArrayDeque<Integer>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);

你会得到像这样的值 { 4, 3, 2, 1}。

java.util.ArrayDeque类提供 LIFO 数据结构的所有操作(例如 push() 和 pop() )

于 2013-06-21T12:10:50.193 回答
0

我们在 StackOverflow 上,您可能想使用 Stack ;) http://docs.oracle.com/javase/6/docs/api/java/util/Stack.html

于 2013-06-21T11:55:33.607 回答
0

您可以使用LinkedListaddFirst()并使用Stack添加新元素

于 2013-06-21T11:56:32.470 回答
0

是的,您可以做的最简单的事情是实现一个堆栈,将所有元素一个一个地推送,然后将它们弹出。它遵循后进先出,这正是您想要的。

于 2013-06-21T11:58:00.527 回答