int[] arr1={10,12,15};
int[] arr2={10,12,15};
Set<int[]> set=new HashSet<int[]>();
set.add(arr1);
set.add(arr2);
Iterator ite=set.iterator();
while(ite.hasNext()){
System.out.println(Arrays.toString(((int[])ite.next())));
}
打印结果为[10, 12, 15] [10, 12, 15]
请问如何去重
额,这样岂不是很蛋疼......
每次存之前还要用Iterator遍历,遍历后还要用for循环进行元素的比对....太复杂了,我等等看有没有更好的方法。
int[] arr1={10,12,15};
int[] arr2={10,15,12};
算是重的吗?
不算,但这个是不是我要的目的,我会对数组进行sort()排序,现在只讨论元素的值一样的情况怎么排重
追答仔细想了一下你这个确实不重写hashcode, 或者不重写comapreto很难实现
至于你说的像楼下重新定义一个数组很麻烦的话,你直接定义一个有3个int属性的数据类来代替这个int数组算了,其实用的空间是一样的,都是一个地址加3个int型变量的空间,就不用再包装成数据类了
额 重新定义一个数组类,你这个麻烦程度也不可小觑....
坐等更好的答案。
不重写hashcode, 或者不重写comapreto这个应该实现不到的
追问集思广益,看看有没有高人帮忙解答下。
追答HashSet实现,利用相同数组.toString()得hashcode一样,必须要重写hashcode,单int[]不可能的
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Ts {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr1 = { 10, 12, 15 };
int[] arr2 = { 10, 12, 15 };
IntAryHash aryHash1 = new IntAryHash(arr1);
IntAryHash aryHash2 = new IntAryHash(arr2);
Set set = new HashSet();
set.add(aryHash1);
set.add(aryHash2);
Iterator ite = set.iterator();
while (ite.hasNext()) {
System.out.println(Arrays.toString(((IntAryHash)ite.next()).getAry()));
}
}
}
class IntAryHash{
private int[] ary ;
public IntAryHash(int[] ary){
this.ary =ary;
}
public int hashCode() {
return Arrays.toString(ary).hashCode();
}
public int[] getAry(){
return ary;
}
public boolean equals(Object o) {
return o.hashCode() == this.hashCode();
}
}
在set中存入长度一样的 int 类型数组,如何去除里面值一样的数组。
int[] arr1={10,12,15};
int[] arr2={10,12,15};
这两个长度和元素都一样,存入set中如何去掉重复。