2013-03-22 89 views
0

我有一個數組是使用繼承,我認爲基本上沒有持有食品飲料和看起來像這樣製作一個數組列表的副本,沒有它循環

allFoodAndDrink.add(new Food(parameters); 
allFoodAndDrink.add(new Drink(parameters); 

所以無論食品和數組飲料被存儲在名爲allFoodAndDrink小吃數組中,但想使某些開始索引數組的一個拷貝到一個終點指標,當我告知使用:

Arrays.copyOfRange(); 

但使用它像這樣的時候:

int[] drink = Arrays.copyOfRange(allFoodAndDrink, 5, 10); 

它吐出來和錯誤和建議是切換到它,然後吐出了另一個錯誤恢復到以前

任何想法

+0

出於好奇,你期望通過不循環避免什麼?一些潛在的解決方案可能更糟糕,比如性能方面。 – 2013-03-22 18:09:57

+0

你的意思是'ArrayList'而不是數組?因爲數組沒有像add()這樣的方法。 – Todd 2013-03-22 18:10:59

+0

爲什麼將副本分配給int [],是不是食物類型?另外allFoodAndDrink看起來像某種集合,而不是一個普通的數組? – HectorLector 2013-03-22 18:12:37

回答

0

您可以使用ArrayList的時候將其轉換爲Arrays.copyOf()方法sublist(int fromIndex, int toIndex)

ArrayList<Foods>() list = allFoodAndDrink.subList(0, allFoodAndDrink.size()-1); 

Foods[] array = (Foods[]) list.toArray(); 

http://docs.oracle.com/javase/6/docs/api/java/util/AbstractList.html#subList(int, int)

您可以將ArrayList轉換成數組與toArray() - 方法:http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#toArray()

+0

這並沒有' t地址複製*範圍*而不是整個列表。 – Vulcan 2013-03-22 18:15:41

+0

你是對的瓦肯人,錯過了那部分。將編輯答案。 – 2013-03-22 18:16:47

+0

雖然你已經修復了答案(我也非常感謝你),但它現在已經是Eng.Fouad答案的近乎完全相同的副本。 – Vulcan 2013-03-22 18:23:00

2

做一個使用ArrayList#subList()ArrayList#toArray()

int first = ...; 
int last = ...; 

Foods[] drink = new Foods[last - first]; 
allFoodAndDrink.subList(first, last).toArray(drink); // fill the array 
+0

因爲這是最好的答案,所以給這個upvote,但問題仍然是將'Food'和'Drink'對象轉換爲'int'數組,但實際上並不工作。 – Vulcan 2013-03-22 18:14:37

+0

@Vulcan你是對的,我更新了我的答案。 – 2013-03-22 18:17:19

+0

將'Drink'轉換爲'Food'的問題依然存在。如果沒有來自提問者的進一步知識,我們只能假設他們唯一的類似的超類是Object,所以爲了運行它,數組需要是Object []'。 – Vulcan 2013-03-22 18:19:49

1

假設你的意思是ArrayList和不是陣列你可以複製一個List使用

allFoodAndDrink.subList(5,10); 

請注意,這將是一個「淺拷貝」和引用會指向同一個對象

+0

這不涉及複製*範圍*而不是整個列表。 – Vulcan 2013-03-22 18:17:24

+0

@Vulcan謝謝......沒有發現, – Edd 2013-03-22 18:22:09

+0

'Lists'來自番石榴,對吧? – 2013-03-22 18:29:52

0

感謝您的答覆我只是服從和示例這就是整型來自我我會嘗試幾個並回復你

相關問題