gpt4 book ai didi

java - 比较两个 ArrayList(无论顺序如何) - Java

转载 作者:行者123 更新时间:2023-12-01 17:51:51 27 4
gpt4 key购买 nike

下面是两个列表 Some1 和 Some,它们实际上具有相同的对象数据,但对象中元素的顺序和数组中对象的顺序不同。我担心的是下面必须返回 true。请多多支持

List<Some> lome1=new ArrayList<Some>();
Some some1 = new Some();
some1.setTime(1000);
some1.setStartTime(25);
some1.setEndTime(30);
lome1.add(some1);
Some some2 = new Some();
some2.setStartTime(125);
some2.setEndTime(130);
some2.setTime(100);
lome1.add(some2);

List<Some> lome2=new ArrayList<Some>();
Some some3 = new Some();
some3.setStartTime(125);
some3.setEndTime(130);
some3.setTime(100);
lome2.add(some3);
Some some = new Some();

some.setStartTime(25);
some.setTime(1000);
some.setEndTime(30);
lome2.add(some);

由于订单而失败的尝试:
使用 deepEquals:

if(Arrays.deepEquals(lome1.toArray(),lome2.toArray()) ){
System.out.println("equal");
}
else {
System.out.println("not equal");
}

使用哈希集,尽管数据相同,但两者给出了不同的哈希值

if(new HashSet<>(lome1).equals(new HashSet<>(lome2)) ){
System.out.println("equal");
}
else {
System.out.println("not equal");
}

检查对象是否包含在另一个对象中

boolean x=true
for(Some d: lome1) {

if(!lome2.contains(d)) {
x = false;
}
}
if(x){
System.out.println("equal");
}
else {
System.out.println("not equal");
}

最佳答案

首先覆盖某些对象的哈希码和等于,它可能看起来像这样,

    @Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Some that = (Some) o;
return startTime == that.startTime &&
endTime == that.endTime &&
time == that.time
}

@Override
public int hashCode() {

return Objects.hash(startTime, endTime, time);
}

一旦设置了 equals 和 Hashcode,那么具有相同值的不同对象将给出相同的 hashcode,因此 .equals() 将返回 true

现在供列表使用list1.containsAll(list2) && list2.containsAll(list1);

关于java - 比较两个 ArrayList(无论顺序如何) - Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49276376/

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