這裏是我的問題: 我有一個整數列表:7,0,2
如果我排序使用Collections.sort(list)
結果列表是:0,2,7
但我想排序排除列表排序過程中的0
,因此輸出如下所示:2,0,7
。
可能嗎?
在此先感謝。的Java排序整數列表排除特定值
編輯:我忘了提我的3種可能的情況: 1)名單隻包含一個「0」,兩個數字 2)列表包含兩個「0」和一個數字 3)列表包含三個「0 「沒有數字
這裏是我的問題: 我有一個整數列表:7,0,2
如果我排序使用Collections.sort(list)
結果列表是:0,2,7
但我想排序排除列表排序過程中的0
,因此輸出如下所示:2,0,7
。
可能嗎?
在此先感謝。的Java排序整數列表排除特定值
編輯:我忘了提我的3種可能的情況: 1)名單隻包含一個「0」,兩個數字 2)列表包含兩個「0」和一個數字 3)列表包含三個「0 「沒有數字
您可以在0
Integer是做,但不僅與Collections.sort()
0
h List.remove(int)
其中int
是索引。Collections.sort()
0
。在代碼中,它提供了:問題編輯後
List<Integer> list = ...;
int indexOf = list.indexOf(Integer.valueOf(0));
list.remove(indexOf);
Collections.sort(list);
list.add(indexOf, Integer.valueOf(0));
更新處理的情況下,在該列表中有多個0
。
我更新了,因爲這個案件處理起來有點複雜。
由於它刪除了多個元素,索引不再是原始大小的索引。
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(7);
list.add(0);
list.add(2);
list.add(9);
list.add(0);
list.add(1);
list.add(0);
list.add(4);
Set<Integer> indexesOf = new HashSet<>();
int indexOf = -1;
int shift = 0;
while ((indexOf = list.indexOf(Integer.valueOf(0))) != -1) {
indexesOf.add(indexOf + shift++);
list.remove(indexOf);
}
Collections.sort(list);
indexesOf.stream().forEach(index -> list.add(index, Integer.valueOf(0)));
System.out.println(list);
}
輸出:
[1,0,2,4,0,7,0,9]
當然。更好的+125比+25 ;-) – GhostCat
冒泡排序這是你的朋友!
public static void main(String[] args) {
List<Integer> list = Arrays.asList(7, 0, 2);
for (int i = 0; i < list.size() - 1; i++) {
int a = list.get(i);
for (int j = i + 1; a != 0 && j < list.size(); j++) {
int b = list.get(j);
if (b != 0 && b < a){
list.set(i, b);
list.set(j, a);
a = b; // EDITED
}
}
}
System.out.println(list);
}
你只想排除所有0嗎? 7,18,0,9,1,0會發生什麼? – jeanr
只有一個建議,因爲沒有太多的代碼需要更正:使用'Collections.sort(List,Comparator)'和'Comparator'來考慮'0'等於一切,否則就表現'正常'。由於'Collections.sort'保證爲* stable *,因此不應該移動任何'0'。 – Izruo
@lzruo它不依賴於排序算法嗎?穩定僅意味着兩個*相等的項目*與預先排序的順序相同,通常項目不會移動。 –