2013-06-21 48 views
1

在Java中是否存在支持反向插入的數據結構?我想爲數據結構添加值。我不知道有多少提前。這些值應插入以下行中:用於反向插入的Java數據結構

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

上次插入的值應始終爲第一個。哪種數據結構最適合?

+0

你有2個使用genric收集堆與方法push和pop FIFO概念 – abhi

+1

+1不知道爲什麼這麼多人認爲Stack是正確的答案。顯示值得問這個問題,因爲Stack不是一個好主意。看到我的答案。 –

+0

嘗試Deque,允許最後插入,http://docs.oracle.com/javase/6/docs/api/java/util/Deque.html#addLast%28E%29 –

回答

5

新元素最好的方法是使用Deque除非你有一個非常老的Java版本,否則你不應該使用Stack。堆棧順便說一句將是你需要的相反順序。

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] 
+1

這就是我在哪裏尋找。謝謝。 –

5

這被稱爲堆棧。見Stack<E>,方法是push()pop()

+0

堆棧將產生'[1,4 ,9]'看看我的答案。無論如何,這是一個傳統類。 –

+1

這兩個都是真的。另外,我不確定迭代順序是否重要。 – Delyan

0

是的,你可以做最簡單的事情就是實現一個堆棧,把你的所有元素逐一然後彈出出來。它遵循後進先出這正是你想要什麼。

1

您可以使用 java.util.ArrayDeque而不是堆棧。從Oracle Java API

LIFO堆棧操作的更完整,一致通過的Deque接口和它的實現,應在優先使用堆棧類提供。例如:

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中提供的所有操作(前推()和pop())一個LIFO數據結構