java集合操作-去重

import java.util.*;

/**
 * 两个集合,去重
 */
public class ElementInList {

    /**
     * 去除两个集合中重复的元素
     *
     * @param la
     * @param lb
     * @param <T>
     * @return
     */
    public synchronized <T extends Comparable<T>> boolean isEqual(List<T> la, List<T> lb) {
        if (la.size() != lb.size())
            return false;
        Collections.sort(la);
        Collections.sort(lb);
        for (int i = 0; i < la.size(); i++) {
            if (la.get(i) != lb.get(i)) ;
            return false;
        }

        return false;
    }

    //取两个集合中不同的元素
    public static ArrayList<String> getDiffElement(List<String> la, List<String> lb) {
        int size = la.size() + lb.size();
        final Integer flagUnique = 1; //唯一标示
        //利用Map中不能存放相同元素的特点
        //默认给定的长度,如果不够会以75%长度增加
        Map<String, Integer> map = new HashMap<String, Integer>(size);
        ArrayList<String> newList = new ArrayList<String>();
        for (String str : la) {
            map.put(str, flagUnique);
        }

        for (String str : lb) {
            Integer value = map.get(str);
            //如果该元素对应值在map中为空表明没有该元素
            if (value != null) {//如果包含该键计数加1
                // 如果map中已经存在该元素,说明la中存在该元素,那么将其value加1
                map.put(str, ++value);
                continue;
            } else {//不包含该键
                map.put(str, flagUnique);
            }
        }
        for (Map.Entry<String, Integer> set : map.entrySet()) {
            //在map中,键值为flagUnique的键相同即为不重复
            if (set.getValue() == flagUnique) {
                //把键添加到newList中
                newList.add(set.getKey());
            }
        }
        return newList;
    }

    public static void main(String[] args) {
        ArrayList<String> la = new ArrayList<String>();
        la.add("a");
        la.add("b");
        la.add("d");
        la.add("f");
        la.add("e");
        ArrayList<String> lb = new ArrayList<String>();
        lb.add("i");
        lb.add("l");
        lb.add("o");
        lb.add("v");
        lb.add("e");
        ArrayList<String> diffList = new ArrayList<String>();
        diffList = getDiffElement(la, lb);
        for (String str : diffList) {
            System.out.println(str);
        }
    }
}

运行结果

a
b
d
f
v
i
l
o
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值