JAVA对集合的操作(交并差)

文章转自 http://colorpanda.iteye.com/blog/2055619 


业务中需求有不同集合中的相同元素,不同元素等。搞了个交并差的集合操作工具类,主要使用到的方法是removeAll、addAll使用set来搞,想的是去除重复:

Java代码   收藏代码
  1. import java.util.Collection;  
  2. import java.util.HashSet;  
  3. import java.util.Set;  
  4.   
  5. /** 
  6.  * 集合操作. 
  7.  *  
  8.  * 进行数学的‘并集’‘交集’‘减法’运算:<br> 
  9.  * 并集:addAll.<br> 
  10.  * 交集:retainAll.<br> 
  11.  * 减法:removeAll.<br> 
  12.  *  
  13.  * @since Apr 8, 2014 
  14.  *  
  15.  */  
  16. public class SetOptUtils {  
  17.   
  18.     /** 
  19.      * 取两数交集. 
  20.      * <P> 
  21.      * Example: 
  22.      *  
  23.      * <pre> 
  24.      * src={1,2,3},dest={2,4} 
  25.      * intersect(dest,src)={2} 
  26.      * </pre> 
  27.      *  
  28.      * @param dest 
  29.      *            The destination set. 
  30.      * @param src 
  31.      *            The source set. 
  32.      * @return the same elements of src and dest 
  33.      */  
  34.     public static <T> Set<T> intersect(Set<T> dest, Set<T> src) {  
  35.         Set<T> set = new HashSet<T>(src.size());  
  36.         copy(set, src);  
  37.         set.retainAll(dest);  
  38.         return set;  
  39.     }  
  40.   
  41.     /** 
  42.      * 取两数并集. 
  43.      * <P> 
  44.      * Example: 
  45.      *  
  46.      * <pre> 
  47.      * src={1,2,3},dest={2,4,5} 
  48.      * union(dest,src)={1,2,3,4,5} 
  49.      * </pre> 
  50.      *  
  51.      * @param dest 
  52.      *            The destination set. 
  53.      * @param src 
  54.      *            The source set. 
  55.      * @return the all elements of src and dest 
  56.      */  
  57.     public static <T> Set<T> union(Set<T> dest, Set<T> src) {  
  58.         Set<T> set = new HashSet<T>(src.size());  
  59.         copy(set, src);  
  60.         set.addAll(dest);  
  61.         return set;  
  62.     }  
  63.   
  64.     /** 
  65.      * 取两数差集(减法). 
  66.      * <P> 
  67.      * Example: 
  68.      *  
  69.      * <pre> 
  70.      * src={1,2,3},dest={2,4,5},src-dest={1,3} 
  71.      * diff(dest,src)={1,3} 
  72.      * </pre> 
  73.      *  
  74.      * @param dest 
  75.      *            The destination set. 
  76.      * @param src 
  77.      *            The source set. 
  78.      * @return the elements in src but not exist dest 
  79.      */  
  80.     public static <T> Set<T> diff(Set<T> dest, Set<T> src) {  
  81.         Set<T> set = new HashSet<T>(src.size());  
  82.         copy(set, src);  
  83.         set.removeAll(dest);  
  84.         return set;  
  85.     }  
  86.   
  87.     /** 
  88.      * 集合判空. 
  89.      *  
  90.      * @param c 
  91.      *            The source collection. 
  92.      * @return true/false 
  93.      */  
  94.     public static boolean isEmpty(Collection<?> c) {  
  95.         boolean rs = false;  
  96.         if (c == null || (c != null && c.isEmpty())) {  
  97.             rs = true;  
  98.         }  
  99.         return rs;  
  100.     }  
  101.   
  102.     /** 
  103.      * 判断两集合是否有相同的元素. 
  104.      * @param dest The destination set. 
  105.      * @param src The source list. 
  106.      * @return true/false 
  107.      */  
  108.     public static <T> boolean isSameElements(Set<T> dest, Set<T> src) {  
  109.         if (isEmpty(dest) || isEmpty(src)) {  
  110.             return false;  
  111.         }  
  112.   
  113.         Set<T> set = intersect(dest, src);  
  114.         if (set.size() > 0) {  
  115.             return true;  
  116.         }  
  117.   
  118.         return false;  
  119.     }  
  120.   
  121.     /** 
  122.      * Copies all of the elements from src set into dest. 
  123.      *  
  124.      * @param dest 
  125.      *            The destination set. 
  126.      * @param src 
  127.      *            The source list. 
  128.      */  
  129.     private static <T> void copy(Set<T> dest, Set<T> src) {  
  130.         dest.addAll(src);  
  131.     }  
  132.   
  133.     public static void main(String[] args) {  
  134.         Set<String> set = new HashSet<String>();  
  135.         Set<String> set2 = new HashSet<String>();  
  136.         set2.add("010W");  
  137.         System.out.println(diff(set2, set));  
  138.     }  
  139.   
  140. }  

 如果不需要去重,也可以使用List进行操作。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java集合框架中提供了多个类可以用于集合的交、并、操作,其中最常用的是Set接口和List接口。下面分别介绍它们的交、并、操作。 Set集合的交、并、: 交集: ```java Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3)); Set<Integer> set2 = new HashSet<>(Arrays.asList(2, 3, 4)); set1.retainAll(set2); // set1 中仅保留 set2 中也存在的元素 System.out.println(set1); // 输出 [2, 3] ``` 并集: ```java Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3)); Set<Integer> set2 = new HashSet<>(Arrays.asList(2, 3, 4)); set1.addAll(set2); // 将 set2 中的元素添加到 set1 中 System.out.println(set1); // 输出 [1, 2, 3, 4] ``` 集: ```java Set<Integer> set1 = new HashSet<>(Arrays.asList(1, 2, 3)); Set<Integer> set2 = new HashSet<>(Arrays.asList(2, 3, 4)); set1.removeAll(set2); // 从 set1 中删除 set2 中也存在的元素 System.out.println(set1); // 输出 [1] ``` List集合的交、并、: 交集: ```java List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3)); List<Integer> list2 = new ArrayList<>(Arrays.asList(2, 3, 4)); list1.retainAll(list2); // list1 中仅保留 list2 中也存在的元素 System.out.println(list1); // 输出 [2, 3] ``` 并集: ```java List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3)); List<Integer> list2 = new ArrayList<>(Arrays.asList(2, 3, 4)); list1.addAll(list2); // 将 list2 中的元素添加到 list1 中 System.out.println(list1); // 输出 [1, 2, 3, 2, 3, 4] ``` 集: ```java List<Integer> list1 = new ArrayList<>(Arrays.asList(1, 2, 3)); List<Integer> list2 = new ArrayList<>(Arrays.asList(2, 3, 4)); list1.removeAll(list2); // 从 list1 中删除 list2 中也存在的元素 System.out.println(list1); // 输出 [1] ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值