删除已排序列表中的重复元素

时间:2014-10-22 00:08:18

标签: java list iteration

如何在迭代时删除排序列表中的重复元素?

我有一个对象的排序列表(不是数组),比如说:

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

感谢。

3 个答案:

答案 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