java 将int类型数组存入Set集合中
int[]arr1={10,12,15};int[]arr2={10,12,15};Set<int[]>set=newHashSet<int[]>();set.add(a...
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]
请问如何去重 展开
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]
请问如何去重 展开
6个回答
展开全部
arr1和arr2是数组含耐,arr1和arr2存放的是你这两个数组的内存地址,直接放入set是无法自动去重的,因为他们的内存地址不一样
如果他们的长度一样,还是绝老迅手动并此去重吧
方法:
遍历set,挨个比较要被放入的数组,若已存在,则不放入
如果他们的长度一样,还是绝老迅手动并此去重吧
方法:
遍历set,挨个比较要被放入的数组,若已存在,则不放入
更多追问追答
追问
额,这样岂不是很蛋疼......
每次存之前还要用Iterator遍历,遍历后还要用for循环进行元素的比对....太复杂了,我等等看有没有更好的方法。
追答
int[] arr1={10,12,15};
int[] arr2={10,15,12};
算是重的吗?
展开全部
因为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();
// }
//
}
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();
// }
//
}
更多追问追答
追问
额 重新定义一个数组类,你这个麻烦程度也不可小觑....
坐等更好的答案。
追答
不重写hashcode, 或者不重写comapreto这个应该实现不到的
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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判断下就能找到了.
这样的话,你写一个很简单的方法遍历下不答基卖清逗就行了,不存在再存,存在就不存了 .
貌似也没什么好的方法了
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比较。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询