gpt4 book ai didi

java - 在我的例子中使用 Set 删除数组中的重复元素

转载 作者:行者123 更新时间:2023-11-29 05:36:32 24 4
gpt4 key购买 nike

我有一个 Array对象,因为我使用的是第 3 方库,数组是通过调用库中的一个方法获得的,我无法访问 MyObject

//I have no access to MyObject class, I am sure the objects contain duplicated elements.
MyObject[] objects = SOME_LIB_CLASS.getObjects();
System.out.println("length is "+ objects.length); //length is 6

我尝试删除对象中的重复元素,我使用 Set :

Set<MyObject>  objectSet = new HashSet<MyObject>(Arrays.asList(objects));
System.out.println("length is "+ objectSet.size()); //length is 6 still

但是 objectSet仍然包含重复的元素,为什么以及如何在不遍历数组的情况下解决我的问题?

最佳答案

如果集合仍然包含“重复”元素,那么对象的 equals 方法就没有达到您的预期。

HashSet 中的重复项由equals 实现确定。

如果你不能改变MyObject.equals()的实现(因为你没有源代码——它是一个库类),我推荐使用TreeSet 并提供一个特殊的比较器。

例如

public class Main {

public static class MyObject {

public int value;

@Override
public String toString() {
return "MyObject [value=" + value + "]";
}

}

public static void main(String str[]) throws IOException {
Set<MyObject> myObjects = new TreeSet<MyObject>(
new Comparator<MyObject>() {

public int compare(MyObject object1, MyObject object2) {
return object1.value - object2.value;
}
});

addMyObjects(myObjects);
addMyObjects(myObjects); // try to add the duplicates

System.out.println(myObjects);
}

private static void addMyObjects(Set<MyObject> set){
for (int i = 0; i < 5; i++) {
MyObject myObject = new MyObject();
myObject.value = i;
set.add(myObject);
}
}
}

关于java - 在我的例子中使用 Set 删除数组中的重复元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19381722/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com