java - 对 Java 列表进行排序通过传递一个字符串并将这个字符串放在最后一个索引处
问题描述
我在列表中的任何地方都有一个字符串,并通过参数传递一个字符串,我需要检查是否有相同的元素,并将其放在列表的末尾,通过重新排序其他元素索引。
它会是这样的:
初始列表:“A”、“B”、“C”、“D”、“E”
输入参数:“B”
如果初始列表中有“B”:重新排序初始列表。
重新排序的列表:“A”、“E”、“C”、“D”、“B”
private void reorderList(List<String> list, String name) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).equals(name)) {
}
}
}
我怎样才能做到这一点?
解决方案
不要忘记,它List
可能有多个相同的元素。如果是这样,那么所有这些都应该移到最后。
您可以使用Iterator
它同时查找和删除所需的元素。之后,只需将所需数量的元素添加到列表的末尾。使用这种方法,您只迭代列表一次,这是O(n)。
private static void reorderList(List<String> list, String name) {
Iterator<String> it = list.iterator();
int total = 0;
while (it.hasNext()) {
if (name.equals(it.next())) {
it.remove();
total++;
}
}
for (int i = 0; i < total; i++)
list.add(name);
}