java - 使用迭代器从 Java 中的列表中删除重复项

标签 java arraylist duplicate-removal

我正在尝试为我的 java 入门类(class)做一道作业题,我们应该在不使用集合或 .contains() 方法的情况下从列表中删除重复项。基本上只使用迭代器和 .equals() 方法。我的代码如下:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


public class sample {
public static void main(String[] args) throws BadListException {
    List<String> myList = new ArrayList<String>();
    myList.add("A");
    myList.add("B");
    myList.add("B");
    myList.add("C");
    myList.add("B");
    myList.add("D");


    unique(myList);
    System.out.println(myList);


}
public static List<String> unique( List<String> items ) throws BadListException { 

    List<String> newList = new ArrayList<String>();
    Iterator<String> itr = items.listIterator();

    // If items is null, throw a BadListException. 

    if (items == null){
        throw new BadListException();
    }
    // If items is empty, return a new empty list. 

    if (items.isEmpty()){
        return newList;
    }

    // Otherwise create and return a new list that contains the items 
    // in L with all duplicates removed.  
    // Example: items: "A","B","C"              result: "A","B","C" 
    // Example: items: "A","A","A"              result: "A" 
    // Example: items: "A","B","B","C","A","D"  result: "A","B","C","D" 

    while (itr.hasNext()){
        for (int i = 0; i < items.size()-1; i++){
            if (itr.next().equals(items.get(i))){
                itr.remove();
            }
        }

    }
    items = newList;
    return newList;

如果有人可以解释我做错了什么以及我应该如何去做,那将非常有帮助。请注意,因为这是为了让我准备测试,所以我希望得到解释,而不仅仅是正确的代码段。

最佳答案

我不解释到底出了什么问题,而是建议您使用调试器来查看程序当前正在做什么。尤其要注意每次调用 iter.next() 时迭代器返回的内容。

正确解决方案的提示:

  1. 您将需要使用多个迭代器...
  2. 您没有将任何内容放入要返回的列表中。
  3. 您需要决定是要创建并返回一个新列表,还是要从现有列表中删除元素。两者都做没有意义。

将来,当您提出问题时,您应该更好地说明程序实际应该做什么。例如:

  • 您没有说明 unique 方法是应该从参数列表中删除元素还是返回包含(仅)唯一元素的新列表。
  • 您没有说列表中元素的顺序是否重要。
  • 你没有说是否可以更改输入列表...或不可以。

在决定如何解决此类问题时,所有这些因素都很重要。尤其是在现实世界中。即使您的作业没有说明这些事情,您仍然需要自己决定代码的工作方式……并用 javadoc 注释记录下来。

关于java - 使用迭代器从 Java 中的列表中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15181395/

相关文章:

r - 找到所有重复项的平均值

java - 寻找 Facebook Graph API 的 Java 模型类

java - ArrayList 在 do..while 循环中未按预期工作

c# - 如何从 TextBox 中删除重复项?

java - 将多个 ArrayLists 快速聚合成一个

java - 如何在包含不同对象的ArrayList中添加对象组的末尾

duplicate-removal - 删除计算中的重复行?

java - Thread.currentThread().interrupt() 与 Runnable#run() 中的 this.interrupt()

java - eclipse 氧气错误

java - 为给定的大小为 n 的集合查找大小为 k 的子集