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

时间:2017-11-23 16:03:59

标签: java linked-list contains

LinkedList包含一组Integer[]。列表中的每个Integer[]都有2个数字。 链表的前面部分:

Integer[]{1,2}, Integer[]{2,3}.....

在向Integer[]添加其他LinkedList之前,我想检查是否已存在具有相同数据的其他Integer[]

Ex:要添加的对象= Integer[] {2,3}。但这已存在于LinkedList中。

所以我想避免添加这个。

如何验证该对象是否已存在?是否有可以使用的内置功能? contains()没有做到这一点。

4 个答案:

答案 0 :(得分:5)

我认为如果您正在处理坐标,最好使用特定的类,因为var UserSchema = new mongoose.Schema({ clients: [{type: mongoose.Schema.Types.ObjectId, ref: 'User'}]}); var user = new User(); UserIWillPushInto.clients.push(user._id); 仅对两个数字没用,并且会导致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> 实现会更好,它会阻止在坐标集中出现重复,因此我们无需手动检查它。

答案 1 :(得分:2)

嗯,你可以用愚蠢的方式做到:

boolean exists = false;
for (Integer[] integers : list) {  // list being the LinkedList
    if (Arrays.equals(integers, value)) {
        exists = true;
        break;
    }
}
if (!exists) {
    list.add(value);
}

答案 2 :(得分:2)

您可以Stream使用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:

N.B:您可以使用ArrayList,因为您也可以保留序列。

答案 3 :(得分:0)

如果你真的想用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);
        }
    });