java 将int类型数组存入Set集合中

发布网友

我来回答

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比较。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com