2014-03-25 112 views
0

我意識到Queue是一個接口。我的問題是這樣的。我有一個Queue作爲LinkedList初始化爲一個月的每一天(31),我需要安排它們。我在理解與泛型相關的問題時遇到了問題。我的第一個想法是要麼建立一個隊列數組(java似乎不喜歡這個)。或者我應該只是創建一個Queue類型的ArrayList並使初始大小爲32?如何管理隊列/ LinkedList的數組/列表?

如果我這樣做,我將如何引用一個特定的隊列來添加一些東西?像這樣?:

爲此,我會說我正在嘗試將某人添加到第17天的列表中。

ArrayList<Queue<Passenger>> lists = new ArrayList<Queue<Passenger>>(32); 
    Passenger person = new Passenger(first, last); 
    (lists.get(17)).add(person); 

我覺得這會給我一個空指針異常?也許不是。任何輸入/示例代碼非常讚賞。

+0

那你究竟想幹什麼?爲什麼你想把隊列放入Arraylist? – Gee858eeG

+0

更多上下文將有所幫助。 – aliteralmind

+0

嗯,我必須有31個這樣的隊列/鏈表,我寧願不必個別宣佈31個。我認爲陣列/陣列列表會更好。 – coltsfan95

回答

2

帶數字的數組列表的構造函數確定列表的初始容量,而不是大小。

因此,當你這樣做:

List<Object> list = new ArrayList<Object>(32); 
System.out.println(list.size()); // prints 0! 

相反,通過將對象添加到它初始化列表:

// note that passing 32 here is just an optimization; it tells the list that 
// we plan to add 32 elements so that it can pre-allocate the appropriate amount 
// of space. We could just as easily have done new ArrayList<Queue<Passenger>>() 
List<Queue<Passenger>> queues = new ArrayList<Queue<Passenger>>(32); 
for (int i = 0; i < 32; ++i) { 
    queues.add(new LinkedList<Passenger>()); 
} 

// now this will work 
queues.get(17).add(person); 
+0

所以我只需添加佔位符LinkedLists直到他們需要使用,是否正確? – coltsfan95

+1

@ coltsfan95:是的,如果你想使用ArrayList。或者,您可以使用Map >並根據需要初始化每個列表。但是,列表方法可能更簡單。 – ChaseMedallion

+0

現在它不允許我使用.get(i),一旦我使用.get從arrayList中獲取LL。它說這個方法是不確定的。它確實讓我補充,出於某種原因。 – coltsfan95