2011-09-13 75 views
-1

我有90個ID,我需要類似下面的圖像。我想先彈出最後一個ID,如果有新的ID添加到堆棧中,我想將它推到最後。最後一次輸出。這樣的事情是否已經存在?我知道我可以使用其他集合實現,但我想知道是否有這樣的堆棧已經完成。最後在Java中出現

enter image description here

+3

「我希望最後一個ID先被彈出」將是後進先出,即正常堆棧。 – geoffspear

+0

這是一個隊列嗎? –

+0

讓它成爲答案Wooble,當我發佈這個問題時,我很笨,現在我不能刪除它。 – LuckyLuke

回答

1

Queue是具有多個實施方式中(包括諸如阻擋適合於多線程溶液隊列)

0

你可以使用排序其通過的java提供Queue<E>實施(見queue實現)的接口。

另一個可能的選擇是使用LinkedList<E>(見:http://download.oracle.com/javase/1.4.2/docs/api/java/util/LinkedList.html

它提供了你需要的所有方法。特別是因爲你的描述看起來如此,如果你不完全確定你想要的行爲。

Queue<E>應當優於LinkedList<E>至少爲大的集合,而不需要的隨機接入。

+0

Deque實現之間LinkedList是一個奇怪的;例如,單獨允許null元素,Queue接口不鼓勵使用空元素,因爲null通常用作特殊值。作爲Deque的一個實現,LinkedList不太可能非常流行。現在,將LinkedList用作隊列或deque實現的唯一可能原因是您還需要隨機訪問元素。有了LinkedList,即使這樣做價格也很高;由於隨機訪問必須通過線性搜索來實現,因此其時間複雜度爲O(n)。改用ArrayDeque。 – Alexandr

+0

這完全正確。我也只是增加了這個解決方案,因爲這個操作似乎並不確定他想要什麼。但我會修改我的帖子,以排斥優先隊列。 – fyr

0

看起來像一個普通的隊列實現,其中元素以相反的順序添加到隊列中以開始。

0

下面是一些代碼,讓你開始:

private static BlockingQueue<String> queue = new LinkedBlockingQueue<String>(); 

public static void main(String args[]) throws InterruptedException { 
    // Start a thread that puts stuff on the queue 
    new Thread(new Runnable() { 
     public void run() { 
      while (true) { 
       try { 
        queue.put("Some message"); 
        Thread.sleep(100); 
       } 
       catch (InterruptedException e) { 
        // Handle interruption 
       } 
      } 
     } 
    }).start(); 

    // Start a thread that takes stuff from the queue (LILO) 
    new Thread(new Runnable() { 
     public void run() { 
      while (true) { 
       try { 
        String message = queue.take(); // Waits if necessary for something to arrive 
        // Do something with message 
        Thread.sleep(100); 
       } 
       catch (InterruptedException e) { 
        // Handle interruption 
       } 
      } 
     } 
    }).start(); 

    Thread.currentThread().wait(); 
} 
+0

爲什麼不使用匿名類來繼承'Thread'而不是實現'Runnable'?您可以擺脫一些樣板代碼,並且匿名類不存在實現'Runnable'的好處。或者我錯過了什麼? –

+0

您需要在這裏使用用例的'Queue'的線程安全實現。其實你正在使用'BlockingQueue'的簽名,它必須按照慣例是線程安全的。也許你應該提到這一點。 –

+0

糟糕 - 遺漏了隊列聲明:)謝謝。 – Bohemian