如何从向量中正确添加和删除对象

时间:2018-06-04 09:02:12

标签: java

这是我认为的一些基本问题。

我有对象坐标:

public class coordinate {
    public int x;
    public int y;

    public coordinate(){
    }

    public coordinate(int x, int y){
        this.x = x;
        this.y = y;
    }
@Override
public String toString() {
    return String.format(x + " " + y);
}
@Override
public int hashCode() {
    int hash = 5;
    hash = 37 * hash + this.x;
    hash = 37 * hash + this.y;
    return hash;
}

@Override
public boolean equals(Object obj) {
    if (this == obj) {
        return true;
    }
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final coordinate other = (coordinate) obj;
    if (this.x != other.x) {
        return false;
    }
    if (this.y != other.y) {
        return false;
    }
    return true;
}
}

我想在向量中添加一些这种类型的元素,但如果我在另一个元素中添加其中一个元素,则跳过它。我试过这样:

ArrayList  nat = new ArrayList ();  //not available 
ArrayList  at = new ArrayList ();   //available

我在这里上传nat向量和一些元素。

for (int i = 0; i < GridButtonPanel.N * GridButtonPanel.N; i++) {
            int row = i / GridButtonPanel.N;
            int col = i % GridButtonPanel.N;
            coordinate coord = new coordinate(row, col);
            if(!nat.contains(coord)){
                at.add(coord);
            }
        }

但最后如果我打印两个向量而不是结果:

at:[0 0,0,0,0,0,0,0,0,0,0,0,0,1,0,11,1 1,2,1 3,1 4,1 1,1 6 ,1 7,2 0,2 1,2 2,2 3,2 4,2 5,2 6,7 3,3 3,3 3,3 3,3 3,3 4,3 3,5 3,3 7,4 0,4 1,4 2,4,4,4,4,5,4,4,4,5,5,5 2,5 3,5 3,5,5,5,5,5 7, 6 0,6 1,6 6,6 3,6 6,6 6,6 6,7 7,7 7,7 7,7 7,7 7,7 7,7 7,7 7]

nat:[0 0,0 0,0 0,0 2,0 4,0 5,0 6,0 0,0 0,1 0,2 0,3 0,4 0,5 0 ,6 0,7 0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,0 0]

如何只添加不在另一个中的坐标?

2 个答案:

答案 0 :(得分:1)

在Coordinate类中实现hashCode()和equals(),并将ArrayList更喜欢Vector

答案 1 :(得分:1)

实施hashcode()/equal()方法&amp;使用HashSet集合。 HashSet是允许使用唯一值的集合,在您的案例中它是理想的集合。当您尝试向HashSet添加元素并且它已经存在时,它将不会添加并返回false。请实现围绕HashSet而不是Vector。