重复数据的处理

集合

去除两个字段中重复的数据

	//去除重复   
	public static List<Integer> getvip(String vip, String vip1){
		String [] vevip=vip.split(",");						//对“,”相隔的String字段拆分
		int[] ivevip = new int[vevip.length];			
		for(int i=0;i<vevip.length;i++){
	    	ivevip[i] = Integer.parseInt(vevip[i]);		//String数组转Integer
	    }
	    String [] arrvip=vip1.split(",");
		int[] iarrvip = new int[arrvip.length];
	    for(int i=0;i<arrvip.length;i++){
	    	iarrvip[i] = Integer.parseInt(arrvip[i]);	//String数组转Integer
	    }
	    Set<Integer> set = new HashSet<Integer>();		//利用set去除重复
	    for (int i : ivevip) {
	        set.add(i);
	    }
	    for (int i : iarrvip) {
	        set.add(i);
	    }
	    List<Integer> list = new ArrayList<Integer>(set);		//转list
	    Collections.sort(list);				//排序
		return list;
	}
	 public static void main(String[] args) {
 	   List<Integer>list=CollectionUtil.getvip("1,2,3,4,5", "4,5,6,7,8");
 	   for(Integer i:list){
 		   System.out.print(i+"\t");
 	   }  
	}
	

测试结果

两个字段中重复的数据全都删除

 /**
     * 找出两个集合中不同的元素
     *
     * @param collmax
     * @param collmin
     * @return
     */
    public static Collection getDifferent(Collection collmax, Collection collmin) {
        //使用LinkedList防止差异过大时,元素拷贝
        Collection csReturn = new LinkedList();
        Collection max = collmax;
        Collection min = collmin;
        //先比较大小,这样会减少后续map的if判断次数
        if (collmax.size() < collmin.size()) {
            max = collmin;
            min = collmax;
        }
        //直接指定大小,防止再散列
        Map<Object, Integer> map = new HashMap<Object, Integer>(max.size());
        for (Object object : max) {
            map.put(object, 1);
        }
        for (Object object : min) {
            if (map.get(object) == null) {
                csReturn.add(object);
            } else {
                map.put(object, 2);
            }
        }
        for (Map.Entry<Object, Integer> entry : map.entrySet()) {
            if (entry.getValue() == 1) {
                csReturn.add(entry.getKey());
            }
        }
        return csReturn;
    }
     /**
     * 获取两个集合的不同元素,去除重复
     *
     * @param collmax
     * @param collmin
     * @return
     */
    public static Collection getDiffentNoDuplicate(Collection collmax, Collection collmin) {
        return new HashSet(getDifferent(collmax, collmin));
    }
     public static void main(String[] args) {
    	List<Integer>list=new ArrayList<Integer>();
    	list.add(1);
    	list.add(2);
    	list.add(3);
    	list.add(4);
    	list.add(5);
    	List<Integer>list1=new ArrayList<Integer>();
    	list1.add(4);
    	list1.add(5);
    	Collection same=CollectionUtil.getDiffentNoDuplicate(list, list1);
    	 Object[] arr=same.toArray(); 
 	    for(int i=0;i<arr.length;i++){
 	    	System.out.print(arr[i]+"\t");
 	    }   
	}

结果:
也可以采用下面的方法,先找出两个集合中重复的元素,再删除目标集合中重复的数据

 /**
     * 找出两个集合中相同的元素
     *
     * @param collmax
     * @param collmin
     * @return
     */
    public static Collection getSame(Collection collmax, Collection collmin) {
        //使用LinkedList防止差异过大时,元素拷贝
        Collection csReturn = new LinkedList();
        Collection max = collmax;
        Collection min = collmin;
        //先比较大小,这样会减少后续map的if判断次数
        if (collmax.size() < collmin.size()) {
            max = collmin;
            min = collmax;
        }
        //直接指定大小,防止再散列
        Map<Object, Integer> map = new HashMap<Object, Integer>(max.size());
        for (Object object : max) {
            map.put(object, 1);
        }
        for (Object object : min) {
            if (map.get(object) != null) {
                csReturn.add(object);
            }
        }
        return csReturn;
    }

public static void main(String[] args) {
    	List<Integer>list=new ArrayList<Integer>();
    	list.add(1);
    	list.add(2);
    	list.add(3);
    	list.add(4);
    	list.add(5);
    	List<Integer>list1=new ArrayList<Integer>();
    	list1.add(4);
    	list1.add(5);
    	 Collection same = CollectionUtil.getSame(list1, list);
	    Object[] arr=same.toArray(); 
	    for(int i=0;i<arr.length;i++){
	    	list.remove(arr[i]);			//遍历删除重复的数据
	    }
 		for(Integer i:list){
 			System.out.print(i+"\t");
 		}
	}
在实际的场景运用中要判断传入的参数是否为空。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值