情况是这样的。
有一个list对象,list里面存储的是int[]型一维数组data,data就两个元素。
比如说:
data[0]={0,1},data[1]={0,1},data[2]={1,0},
data[3]={3,1},data[4]={3,2},data[5]={2,3}
当然还有其他元素
现在要把这个list去除重复的数组,而且,{0,1}和{1,0}这种情况判定为相同
用了很多方法,都没有去掉,纠结啊 :(
[code="java"] for(int i=0;i<list.size();i++){
if(list.lastIndexOf(list.get(i))!=i){
list.remove(i);
i--;
}
}
//漏了一点
[/code]
试这用用set吧
增加data[index] 这个数组的索引号0和1位进行互换进行比较
用Set的话,可以把现在的list中放的数据改用一个自定义类型,并重写hashCode方法。
如果保留List的话,就要自己遍历List来剔除你认为重复的元素。
既然只了只有2个属性,那么使用一个类去代替int[] 并重写equals方法
[code="java"]import java.util.ArrayList;
import java.util.List;
public class Test {
public static void main(String[] args) throws Exception {
List list = new ArrayList();
list.add(new Data(1,2));
list.add(new Data(2,1));
for(int i=0;i<list.size();i++){
if(list.lastIndexOf(list.get(i))!=i){
list.remove(i);
}
}
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).getA()+","+list.get(i).getB());
}
}
}
class Data{
private int a;
private int b;
Data(int a,int b){
this.a = a;
this.b = b;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
@Override
public boolean equals(Object obj) {
Data d = (Data)obj;
if((d.getA()==this.getA()&&d.getB()==this.getB())||(d.getA()==this.getB()&&d.getB()==this.getA())){
return true;
}
return false;
}
}[/code]
我写的这个方法 效率不高, 再数量比较大的时候用 myali88 说的 重写hashCode()方法会快很多