的Java排序整数列表排除特定值
问题描述:
这里是我的问题: 我有一个整数列表: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
hList.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]
+1
当然。更好的+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它不依赖于排序算法吗?稳定仅意味着两个*相等的项目*与预先排序的顺序相同,通常项目不会移动。 –