这是我认为的一些基本问题。
我有对象坐标:
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]
如何只添加不在另一个中的坐标?
答案 0 :(得分:1)
在Coordinate类中实现hashCode()和equals(),并将ArrayList更喜欢Vector
答案 1 :(得分:1)
实施hashcode()/equal()
方法&amp;使用HashSet集合。 HashSet
是允许使用唯一值的集合,在您的案例中它是理想的集合。当您尝试向HashSet添加元素并且它已经存在时,它将不会添加并返回false
。请实现围绕HashSet而不是Vector。