繁体   English   中英

如何检查java中的LinkedList中是否存在对象?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM