java 实现数组取差集 高效方法 青旅半醒 2022-02-20 07:54 185阅读 0赞 已知 数组 String y = "a,b,c,d,e,f,g"; String x = "c,d,e,f"; 求:取y与x的差集。。即确定x在y中肯定存在 使用工具类 /** * @描述 两个数组取差集, 从多的里面取。。。 * @参数 [fids, pids] fids是多的数组;pids是少的数组 * @返回值 java.lang.String * @创建人 Young * @创建时间 2019/4/12 20:46 **/ private String getDifSet(String mores, String lesss) { String[] more = mores.split(","); String[] less = lesss.split(","); //将多转换为set fid 肯定不是小的 Set<String> set = new HashSet<String>(Arrays.asList(more)); for (String p : less) { // 如果集合里有相同的就删掉,如果没有就将值添加到集合 if (set.contains(p)) { set.remove(p); } else { set.add(p); } } return StringUtils.join(set.toArray(), ","); } ![20190413184016335.png][] 此时只是确定是大小包含的关系。。。 2,如果y中含有x中不存在的元素,那么执行出来的就是不一样了。。 String x = "a,b,c,d,e,f,g"; String y = "c,d,e,f,x,y"; ![20190413184237164.png][] 两个合集 减掉 两个并集。 3,如果两个元素不确定是否包含的关系,只想取只在x中存在(即去掉y和x共有 的值 且在x中存在的值) private static String getDifSet(String mores, String lesss) { String[] more = mores.split(","); String[] less = lesss.split(","); //将多转换为set fid 肯定不是小的 Set<String> set = new HashSet<String>(Arrays.asList(more)); for (String p : less) { // 如果集合里有相同的就删掉,如果没有就将值添加到集合 if (set.contains(p)) { set.remove(p); } } return StringUtils.join(set.toArray(), ","); } 去除添加的else结构。 ![2019041318454211.png][] 如果不确定大小的时候。。。 需要先判断哪个是大的集合 1,如果是取两个集合的并集 去除 两个集合的合集,且不确定哪个是大的集合 public static void main(String[] args) { String x = "a,b,c,m,n"; String y = "a,b,c,d,e,f"; String difSet = getDifSet(x, y); System.out.println(difSet); } /** * @描述 两个数组取差集, 从多的里面取。。。 * @参数 [fids, pids] fids是多的数组;pids是少的数组 * @返回值 java.lang.String * @创建人 Young * @创建时间 2019/4/12 20:46 **/ private static String getDifSet(String mores, String lesss) { String[] more = mores.split(","); String[] less = lesss.split(","); //将多转换为set fid 肯定不是小的 Set<String> set = new HashSet<String>(Arrays.asList(more.length > less.length ? more : less)); for (String p : less.length > more.length ? more:less) { // 如果集合里有相同的就删掉,如果没有就将值添加到集合 if (set.contains(p)) { set.remove(p); }else { set.add(p); } } return StringUtils.join(set.toArray(), ","); } ![20190413185437771.png][] 2,如果是取大集合中存在的,且去除 两个集合的并集,并且不知道哪个是大集合和小集合。(该场景应用比较多。。) public static void main(String[] args) { String x = "a,b,c"; String y = "a,b,c,d,e,f"; String difSet = getDifSet(x, y); System.out.println(difSet); } private static String getDifSet(String mores, String lesss) { String[] more = mores.split(","); String[] less = lesss.split(","); //将多转换为set fid 肯定不是小的 Set<String> set = new HashSet<String>(Arrays.asList(more.length > less.length ? more : less)); for (String p : less.length > more.length ? more:less) { // 如果集合里有相同的就删掉,如果没有就将值添加到集合 if (set.contains(p)) { set.remove(p); } } return StringUtils.join(set.toArray(), ","); } ![20190413185251909.png][] [20190413184016335.png]: /images/20220220/2922ad224f0c48a2a7a7dae83fe4c0f7.png [20190413184237164.png]: /images/20220220/e049cc0e093248ae9fffe6d5ef63750d.png [2019041318454211.png]: /images/20220220/59ecae98f5ca4994b33aa1043d7a12b9.png [20190413185437771.png]: /images/20220220/d45d441993a743ae8290279509b459e6.png [20190413185251909.png]: /images/20220220/0f38c42d78a1478ea572a60daed4ad99.png
还没有评论,来说两句吧...