有在你的代碼的幾個誤區:
- 一個
Collection
不能作爲數組([i]
符號)來訪問。您已使用Iterator
進行適當的遍歷。在遍歷時使用它來訪問這些值。
- 在該循環中訪問
[i+1]
它具有定義的最終條件的方式很可能會拋出ArrayIndexOutOfBoundsException
。
- 你提到你需要返回一個新的列表,但你似乎試圖重新排列在同一個
l1
Collection
中的元素。
- 不知道,如果它在你的代碼中省略了,但你沒有定義的引用變量
i
,也是最重要的,在整個循環迭代保持其價值。注意這個變量不是必需的,因爲你已經使用迭代器遍歷了Collection
。
我建議
- 遍歷原來
Collection
因爲你已經做。請記住使用iterator.next()
實際上使Iterator
繼續前進並實際檢索值。
- 將每個值插入到新列表中,但不僅僅在最後(使用
add(item)
)。尋找它應該進入(例如用while
或for
迭代循環的話),並使用List#add(int, E)
新元素拖放到它的地方轉移下列元素右側的位置的位置。這樣,這個新的List
將保證始終有序。
- 閱讀收藏和循環,並從Oracle的Java教程一個好的java教程,例如The Collection InterfaceLanguage Basics: The while statement可能是一個很好的起點。
只給一個起點/骨架,這裏是它如何可能看起來像一個大綱:
public static Collection<Integer> sort(Collection<Integer> l1){
List<Integer> sortedList = new ArrayList<Integer>();
for (Iterator<Integer> it = l1.iterator(); it.hasNext();) {
Integer currentValue = it.next();
// Look into sortedList the position where currentValue should go into
int pos = 0;
for (int i=0;i<sortedList.size();i++) {
// Compare currentValue with sortedList.get(i)
// to know if i is the right position for currentValue.
// If it is, assign it to pos
}
sortedList.add(pos, currentValue);
}
return sortedList;
}
這是因爲Java允許[]運算符只用於內置數組,如'new Integer [14]'。此外,'l1'是一個集合,它是(不像一個列表)沒有排序,所以排序它是沒有意義的。 我建議先通過一些Java基礎教程。 – 2014-10-29 09:49:09
方括號語法不適用於Java中的集合。另外,不是每個集合都適合您的任務 - 您需要精確定製的集合。使用帶有['.get(int)'](http://docs.oracle.com/javase/7/docs/api/java/util/List.html#get(int))方法的列表和訪問元素,而不是方形的breckets。 – bsiamionau 2014-10-29 09:49:43
瞭解Array和ArrayList之間的區別 它們在java中是兩個不同的東西 – 2014-10-29 10:03:11