如何在迭代时删除排序列表中的重复元素?
我有一个对象的排序列表(不是数组),比如说:
apple apple pear pear pear peach
我目前正在使用' for'在我的列表中使用Iterator函数循环。
for(ListIterator<String> iter = list.listIterator();iter.hasNext();) {
String it = iter.next();
System.out.println(it+" - "+Collections.frequency(list.it));
iter.remove();
}
当我存储了第一个&#34; apple&#34;时,我希望删除其他&#34; apple&#34;完全来自列表的条目,以便列表中的下一个项目将是&#34; pear&#34;。当我存储了第一个&#34; pear&#34;时,我希望删除所有重复的&#34; pear&#34;列表中的元素,以便下一个元素将是桃子。完成迭代后,我应该只有三个元素:
apple pear peach
感谢。
答案 0 :(得分:0)
好吧,你有一个排序列表..那么你需要创建一个没有重复元素的列表,你可以在迭代它时编辑一个列表,除非你使用Iterator
List<String> newFruitList = new LinkedList<String>();
String lastFruit = null;
for (String fruit : yourSortedList) {
if (lastFruit == null || !lastFruit.equals(fruit)) {
newFruitList.add(fruit);
lastFruit = fruit;
}
}
顺便说一句,在java定义中:
另一件事,我建议您使用另一种数据结构,如果您需要排序的类似Tree
的排序和更快的O(log n)......在您的情况下查找{{1} }
答案 1 :(得分:0)
当前List
与之前的word
匹配时,您可以在word
remove()
上使用Iterator
。像,
List<String> al = new ArrayList<>(Arrays.asList("apple", "apple",
"pear", "pear", "pear", "peach"));
String str = null;
Iterator<String> iter = al.iterator();
while (iter.hasNext()) {
String word = iter.next();
if (!word.equals(str)) {
str = word;
} else {
iter.remove();
}
}
System.out.println(al);
输出
[apple, pear, peach]
答案 2 :(得分:0)
使用列表迭代器是一种在迭代时从列表中删除项目的安全方法:以下代码示例执行您想要的操作(无需创建重复列表):
public class RemoveDuplicates
{
public static void main(String... args)
{
List<String> list = new ArrayList<>();
list.add("apple");
list.add("apple");
list.add("pear");
list.add("pear");
list.add("pear");
list.add("peach");
System.out.println("Original list: ");
for (String s : list)
System.out.println(s);
String temp = "";
for (Iterator<String> iterator = list.iterator(); iterator.hasNext();)
{
String s1 = iterator.next();
if (temp.equals(s1))
{
iterator.remove();
}
temp = s1;
}
System.out.println("\nProcessed list:");
for (String s : list)
System.out.println(s);
}
}
节目输出:
Original list:
apple
apple
pear
pear
pear
peach
Processed list:
apple
pear
peach