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

如何从ArrayList中删除重复的元素(myClass的对象)

卢勇
2023-03-14

我有一个阵列列表

ArrayList<WorkPosition> info = new ArrayList<>();

在某些地方,我添加了一些对象。在结束这个数组列表有相同的对象多次...对象有一些int值和2个数组列表

97 [9, 10, 15] [1202, 1204, 2082]
97 [9, 10, 15] [1202, 1204, 2082]
97 [9, 10, 15] [1202, 1204, 2082]
42 [14, 16, 29] [404, 1081, 1201D]
42 [14, 16, 29] [404, 1081, 1201D]
42 [14, 16, 29] [404, 1081, 1201D]
57 [18, 30, 32] [2081, 435, 1032]
57 [18, 30, 32] [2081, 435, 1032]
57 [18, 30, 32] [2081, 435, 1032]
34 [19, 27, 28] [4501, 831, 201]
34 [19, 27, 28] [4501, 831, 201]
34 [19, 27, 28] [4501, 831, 201]

有没有办法删除额外的外观?我读过这篇文章,如何从ArrayList中删除重复的元素?但在我的例子中,我没有字符串,而是工作位置类型的对象。。

public class WorkPosition {

    private int id;
    ArrayList<Integer> machines = new ArrayList<>();
    ArrayList<String> bottles= new ArrayList<>();


    public WorkPosition(int id, ArrayList<Integer> machines, ArrayList<String> bottles) {

        this.id = id;
        this.machines = machines;
        this.kaloupia = kaloupia;
    }

    //getters and setters...
}

共有3个答案

卜凯旋
2023-03-14

只需将ArrayList转换为Set实现即可。Set集合不包含重复的元素。示例

 Set<WorkPosition> set = new HashSet<WorkPosition>(list);

列表、集合或映射中的所有对象(作为键或值)都应该有一个适当的相等定义。请参见Collection.contains、Map.contains键和Map.contains值。

阅读更多关于实现平等的实践。

申自明
2023-03-14

您可以将列表转换为集合

ArrayList<WorkPosition> info = new ArrayList<>();
Set<WorkPosition> distincts = new HashSet<>(info);

这要求WorkPosition对象重写equals(obj)方法hashCode(),如下所示:

public class WorkPosition {

   // your code

    @Override
    public boolean equals(Object obj) {
        // logic here
    }

    @Override
    public int hashCode() {
        // logic here
    }
}
松昱
2023-03-14

我读过这篇文章,如何从ArrayList中删除重复的元素?但是在我的例子中,我没有Strings,而是WorkPosition

由于答案中的解决方案并不关心您是否使用Strings或其他行为良好的对象,因此您需要做的就是从解决方案的角度使WorkPosition对象行为良好。

为此,您必须重写两个特定的方法-hashCode()equals(Object),并确保它们的行为符合规范。一旦完成此操作,消除重复的方法将适用于您的对象,就像它适用于Strings一样。

class WorkPosition {
    @Override
    public boolean equals(Object obj) {
        // The implementation has to check that obj is WorkPosition,
        // and then compare the content of its attributes and arrays
        // to the corresponding elements of this object
        ...
    }
    @Override
    public int hashCode() {
        // The implementation needs to produce an int based on
        // the values set in object's fields and arrays.
        // The actual number does not matter too much, as long as
        // the same number is produced for objects that are equal.
        ...
    }
}
 类似资料:
  • 问题内容: 如何从ArrayList中删除重复的元素? 问题答案: 如果你不想在中添加重复项,则应考虑为什么要使用允许重复项的。删除重复元素的最简单方法是将内容添加到中(不允许重复),然后将其添加Set回中ArrayList: 当然,这会破坏中的元素顺序。

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

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

  • 这段代码运行良好,但我想知道它的性能,我指的是它的总体时间复杂度?

  • 要从复杂对象中删除某些字段。 我想删除'阴谋'

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

  • 我很难从自定义对象的ArrayList中删除重复项。 删除重复项 自定义对象等于() 删除重复项后的输出 关于为什么它实际上没有删除重复项,有什么提示吗?或者它实际上是通过将副本替换为原始副本来删除副本?不知道这里发生了什么。

  • 本文向大家介绍2种Java删除ArrayList中的重复元素的方法,包括了2种Java删除ArrayList中的重复元素的方法的使用技巧和注意事项,需要的朋友参考一下 这篇文章将给出两种从ArrayList中删除重复元素的方法,分别是使用HashSet和LinkedHashSet。 ArrayList是Java中最常用的集合类型之一。它允许灵活添加多个null元素,重复的元素,并保持元素的插入顺序