发布网友
共5个回答
热心网友
arr1和arr2是数组,arr1和arr2存放的是你这两个数组的内存地址,直接放入set是无法自动去重的,因为他们的内存地址不一样
如果他们的长度一样,还是手动去重吧
方法:
遍历set,挨个比较要被放入的数组,若已存在,则不放入
热心网友
因为arr1 == arr2 ---.> false
HashSet, 你这个很难实现的,用TreeSet然后重写compareTo可以实现通过Set来驱重
TreeSet实现方案
import java.util.Arrays;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Ts {
/**
* @param args
*/
public static void main(String[] args) {
int[] arr1 = { 10, 12, 15 };
int[] arr2 = { 10, 12, 15 };
IntAry ary1 = new IntAry(arr1);
IntAry ary2 = new IntAry(arr2);
Set<IntAry> set = new TreeSet<IntAry>();
set.add(ary1);
set.add(ary2);
Iterator ite = set.iterator();
while (ite.hasNext()) {
System.out.println(Arrays.toString(((IntAry)ite.next()).getAry()));
}
}
}
class IntAry implements Comparable<IntAry>{
private int[] ary = null;
public IntAry(int[] ary){
this.ary = ary;
}
public int[] getAry(){
return ary;
}
public int compareTo(IntAry obj) {
int[] o = obj.getAry();
if(o.length != ary.length){
return -1;
}
for(int i = 0; i < ary.length; i++){
if(ary[i] != o[i]){
return -1;
}
}
return 0;
}
//HashSet, seems impossible
//public int hashCode() {
//
//return super.hashCode();
//}
//
}
热心网友
public static void main(String[] args) {
int[] a={1,2,3};
int[] b={2,3,1};
Arrays.sort(b);
System.out.println(Arrays.toString(a).equals(Arrays.toString(b)));
}
如果楼主每个数组都排序的话,你可以用Arrays.toString(a)将里面的数组转换成String用String的equals判断下就能找到了.
这样的话,你写一个很简单的方法遍历下不就行了,不存在再存,存在就不存了 .
貌似也没什么好的方法了
热心网友
说清楚追问在set中存入长度一样的 int 类型数组,如何去除里面值一样的数组。
int[] arr1={10,12,15};
int[] arr2={10,12,15};
这两个长度和元素都一样,存入set中如何去掉重复。
热心网友
如果你的数组时固定大小,你可以试着把数组转成int(Integer)存入,再去container比较。