[英]How to check if an object exists in a LinkedList in java?
LinkedList包含一组Integer[]
。 列表中的每个Integer[]
都有2个数字。 链表的前面:
Integer[]{1,2}, Integer[]{2,3}.....
在将另一个Integer[]
添加到此LinkedList
,我想检查是否已存在具有相同数据的另一个Integer[]
。
例如:要添加的对象= Integer[] {2,3}
。 但这已经存在于LinkedList中。
所以我想避免添加这个。
如何验证该对象是否已存在? 是否有可以使用的内置功能? contains()
没有做到这一点。
如果你正在处理坐标,我认为你最好使用一个特定的类,因为Integer[]
只对两个数字没用,并且会导致contains()
和其他List
方法(如.sort()
出现一些问题。
您最好创建一个Coordinate
类,它将包含两个值:
public class Coordinate{
private int x;
private int y;
//getters and setters, constructor
@Override
public boolean equals(Object o) {
if (o == this) return true;
if (!(o instanceof Coord)) {
return false;
}
Coordinate coord = (Coordinate) o;
return coord.x == x &&
coord.y == y;
}
@Override
public int hashCode() {
int result = 17;
result = 31 * result + x;
result = 31 * result + y;
return result;
}
}
然后你可以使用:
LinkedList<Coordinate>
注意:
请注意,使用Set
实现在这里会更好,它将防止在坐标集中出现重复,因此我们不需要手动检查它。
好吧,你可以用愚蠢的方式做到这一点:
boolean exists = false;
for (Integer[] integers : list) { // list being the LinkedList
if (Arrays.equals(integers, value)) {
exists = true;
break;
}
}
if (!exists) {
list.add(value);
}
您可以使用Stream
with Set
来解决您的问题,如下所示:
List<Set<Integer>> list = new LinkedList<>();
list.add(Stream.of(1, 2).collect(Collectors.toSet()));
Set<Integer> s1 = new HashSet<>();
s1.add(1);
s1.add(2);
System.out.println(list.contains(s1));
Set<Integer> s2 = new HashSet<>();
s2.add(1);
s2.add(4);
System.out.println(list.contains(s2));
O / P:
真正
假
注意:您可以使用ArrayList
因为您也可以保留序列。
如果你真的真的想用contains()
(或者无论出于何种原因没有其他选择),你可以像这样实现它:
final Integer[] newPair = {2, 3};
final boolean exists = values.contains(new Object()
{
// note that List.contains() javadoc explicitly specifies that
// newPair is used as the receiver not the argument for equals()
@Override
public final boolean equals(final Object listElement)
{
final Integer[] otherPair = (Integer[]) listElement;
return Arrays.equals(newPair, otherPair);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.