java将arraylist中的特定元素移动到最后一个索引
假设我有这个清单
List<Integer> grades = Arrays.asList(9,8,1,0,7,0,0,3);
我想把所有的零移到最后一个索引。。所以我希望输出类似于:
9,8,1,7,3,0,0,0
我可以用简单的数组来实现这一点,但我仍然不知道如何在ArrayList中实现这一点
你可以在下面搜索框中键入要查询的问题!
假设我有这个清单
List<Integer> grades = Arrays.asList(9,8,1,0,7,0,0,3);
我想把所有的零移到最后一个索引。。所以我希望输出类似于:
9,8,1,7,3,0,0,0
我可以用简单的数组来实现这一点,但我仍然不知道如何在ArrayList中实现这一点
# 1 楼答案
要实现比使用O(n log(n))
sort()
解决方案更快的O(n)实现,请使用与阵列相同的方法:当然,如果不是一个
ArrayList
,那么使用set(int, ?)
可能对性能有害,因此最好使用一个可更新的迭代器,即ListIterator
:为了进行比较,以下是可比较的阵列解决方案:
# 2 楼答案
您可以使用Comparator.comparing对列表进行相应的排序,将所有
0
移到最后,而不对剩余的值进行排序# 3 楼答案
谢谢各位
我用与使用简单阵列相同的方法实现了这一点:
# 4 楼答案
如注释中所述,您可以通过使用
List
的get
和set
方法而不是[]
操作符来重用数组的相同代码另一种“偷偷摸摸”的方法可能是利用排序保持两个相等元素的相对位置这一事实,并使用自定义
Comparator
对列表进行排序,该自定义Comparator
根据一个项是否等于0
进行排序-所有的零将移到末尾,所有其他项将保持其相对位置: