当前位置: 首页 > 知识库问答 >
问题:

如何从未排序的Arraylist中删除重复的数字?

莫宝
2023-03-14

我正在开发一个Java程序来生成一个随机数组列表,其中包含1-25个整数。然后我需要制作数组的副本并将其存储在单独的位置。虽然我能够完成这些部分,但我在实现以下方法时遇到了困难:

>

存储已删除的所有重复项

这是我到目前为止的计划:

public static void main(String[] args) {
    ArrayList <Integer> OgArr = new ArrayList <Integer>();
    
    Random random = new Random();
    
    random.setSeed(System.currentTimeMillis());
    
    int n = 35;
    
    for (int i = 0; i < n; i++)
    {
        Integer r = 1 + random.nextInt(25);
        OgArr.add(r);
    }
    
    ArrayList<Integer> copyOfArr = (ArrayList<Integer>) OgArr.clone();
    
    int i = 0;
    int leng = copyOfArr.size();
    
    for (i = 0; i < leng - 1; i++) {
        int imin = i;
        for (int j = i + 1; j < leng; j++) {
            if (copyOfArr.get(j) < copyOfArr.get(imin)) {
                imin = j;
            }
        }
        Collections.swap(copyOfArr,i,imin);      
    }
    System.out.println(copyOfArr);
}

这个程序执行前两个功能,我已经探索了使用临时数组、for循环和LinkedHashSet。我的努力没有成功,我真的很感激在实施过程中得到帮助。

共有1个答案

向苗宣
2023-03-14

我无法从你的代码中找出你做任务1和2的“心理模型”是什么。事实上,问题中的相关代码对我来说没有意义。我认为你可能应该扔掉大部分,重新开始。

如果你这么做。。。我建议您首先考虑代码需要做什么。通过编写一些伪代码来向自己解释这一点。然后用Java重写伪代码。

以下是一些提示,可以让你朝着正确的方向思考:

>

  • 您可以使用可选的Iterator.remove方法在迭代时删除元素。阅读Iterator的javadoc。

    或者,您可以创建一个新列表,并一次复制一个元素,而忽略不应该存在的元素。

    您可以使用哈希集

    使现代化

    既然你真的很挣扎,这里有一些伪代码。阅读它,理解它,然后使用上面的提示将其翻译成工作代码:

       set seen = ... // empty set
       list duplicates = ...// empty list
       list newList = ... // new empty list
       for element in originalList {
           // Test if 'element' has been 'seen' before
           // If no, add 'element' to 'newList' and add `element` to `seen`
           // If yes, add 'element' to 'duplicates'
       }
    

    正如我之前说过的,找到并阅读javadocs。

    最后,解决这个问题的方法不止一种,有些方法比其他方法更有效。但你的目标应该是在尽可能少的帮助下找到一个可行的解决方案。努力做到“工作”和“理解代码”。

  •  类似资料:
    • 结果:[1,2,3,3,3,4,4][1,2,3,3,3,4,4]

    • 问题内容: 如何从ArrayList中删除重复的元素? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加Set回中ArrayList: 当然,这会破坏中的元素顺序。

    • 问题内容: 我有一个字符串数组列表,并在其中添加了一些重复值。我只想删除那个重复的值,那么如何删除它。 在这个例子中我有一个主意。 但是有没有足够的方法来删除该重复表格列表。没有使用For循环?我可以通过使用HashSet或其他方式来做到这一点,但只能使用数组列表。想对此提出您的建议。谢谢您的提前答复。 问题答案: 您可以从列表中创建一个。在将包含每个元素只有一次,在相同的顺序。然后从创建一个新的

    • 问题内容: 我有一个,并且我想从中删除重复的字符串。我怎样才能做到这一点? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加回中: 当然,这破坏了中元素的顺序。

    • 我有一个arraylist,它包含一对整数(例如int i,int j)。但它可能包含重复对(如(int i,int j)和(int j,int i))。现在如何在O(n)时间复杂度中去除重复。

    • 问题内容: 这个问题已经在这里有了答案 : 是什么导致java.lang.ArrayIndexOutOfBoundsException,如何防止它发生? (25个答案) 4年前关闭。 所以我有另一个带有main方法的类,在该类中我调用createNumbers(),createColours(),createBalls()。当我运行程序时,我在numere.remove(nr)处得到一个Index