Java_集合操作_集合运算时使用更优雅的方式
2015-04-12 14:45
375 查看
在初中代数中,我们经常会求两个集合的并集、交集、差集等,在Java中也存在着此类运算,那如何实现呢?一提到此类集合操作,大部分的实现者都会说:对两个集合进行遍历,即可求出结果。是的,遍历可以实现并集、交集、差集等运算,但这不是最优雅的处理方式。下面来看看如何进行更优雅、快速、方便的集合操作。
1.并集
也叫做合集,把两个集合加起来即可,这非常简单,代码如下:
运行结果:
[A, B, C, D]
2.交集
计算两个集合的共有元素,也就是你有我也有的元素集合,代码如下:
运行结果:
[A]
3.差集
由所有属于A但不属于B的元素组成的集合,代码如下:
运行结果:
[B, C]
4.无重复的并集
什么叫无重复的并集?并集是集合A加集合B,那如果集合A和集合B有交集,就需要确保并集的结果中只有一份交集,此为无重复的并集。此操作也比较简单,代码如下:
运行结果:
[A, B, C, D]
有读者可能说了,求出两个集合的并集,然后转变成HashSet剔除重复元素不就解决问题了吗?错了,这样解决是不行的,比如集合A有10个元素(其中有两个元素值是相同的),集合B有8个元素,它们的交集有2个元素,我们可以计算出它们的并集是18个元素,而无重复的并集有16个元素,但是如果使用HashSet算法,算出来则只有15个元素,因为你把集合A中原本就重复的元素也剔除掉了。
集合的这些操作在持久层中使用得非常频繁,从数据库中取出的就是多个数据集合,之后我们就可以使用集合的各种方法构建我们需要的数据了。
1.并集
也叫做合集,把两个集合加起来即可,这非常简单,代码如下:
package deep; import java.util.ArrayList; import java.util.List; public class Client { public static void main(String[] args) { List<String> list1 = new ArrayList<String>(); list1.add("A"); list1.add("B"); List<String> list2 = new ArrayList<String>(); list2.add("C"); list2.add("D"); // 并集 list1.addAll(list2); System.out.println(list1); } }
运行结果:
[A, B, C, D]
2.交集
计算两个集合的共有元素,也就是你有我也有的元素集合,代码如下:
package deep; import java.util.ArrayList; import java.util.List; public class Client { public static void main(String[] args) { List<String> list1 = new ArrayList<String>(); list1.add("A"); list1.add("B"); list1.add("C"); List<String> list2 = new ArrayList<String>(); list2.add("A"); list2.add("D"); // 交集 list1.retainAll(list2); System.out.println(list1); } }
运行结果:
[A]
3.差集
由所有属于A但不属于B的元素组成的集合,代码如下:
package deep; import java.util.ArrayList; import java.util.List; public class Client { public static void main(String[] args) { List<String> list1 = new ArrayList<String>(); list1.add("A"); list1.add("B"); list1.add("C"); List<String> list2 = new ArrayList<String>(); list2.add("A"); list2.add("D"); // 差集 list1.removeAll(list2); System.out.println(list1); } }
运行结果:
[B, C]
4.无重复的并集
什么叫无重复的并集?并集是集合A加集合B,那如果集合A和集合B有交集,就需要确保并集的结果中只有一份交集,此为无重复的并集。此操作也比较简单,代码如下:
package deep; import java.util.ArrayList; import java.util.List; public class Client { public static void main(String[] args) { List<String> list1 = new ArrayList<String>(); list1.add("A"); list1.add("B"); list1.add("C"); List<String> list2 = new ArrayList<String>(); list2.add("A"); list2.add("B"); list2.add("D"); // 删除在list1中出现的元素 list2.removeAll(list1); // 把剩余的list2元素添加到list1中 list1.addAll(list2); System.out.println(list1); } }
运行结果:
[A, B, C, D]
有读者可能说了,求出两个集合的并集,然后转变成HashSet剔除重复元素不就解决问题了吗?错了,这样解决是不行的,比如集合A有10个元素(其中有两个元素值是相同的),集合B有8个元素,它们的交集有2个元素,我们可以计算出它们的并集是18个元素,而无重复的并集有16个元素,但是如果使用HashSet算法,算出来则只有15个元素,因为你把集合A中原本就重复的元素也剔除掉了。
集合的这些操作在持久层中使用得非常频繁,从数据库中取出的就是多个数据集合,之后我们就可以使用集合的各种方法构建我们需要的数据了。
相关文章推荐
- [编写高质量代码:改善java程序的151个建议]建议76 集合运算时使用更优雅的方式
- [改善Java代码]集合运算时使用更优雅的方式
- java 4 集合运算时使用更优雅的方式
- java中集合之间的运算优雅方式
- 集合运算时使用更优雅的方式
- java使用lambda表达式对List集合进行操作(JDK1.8)
- 使用Iterator方式对集合进行remove/add 操作
- 使用Java 8新增的Predicate操作来操作集合
- 【Java】提取JSON数值时遇到数组集合时使用的K-V方式转换
- 使用java JDBC方式操作oracle blob类型数据
- Java的jdbc使用addBatch进行批处理操作的几种方式
- 使用Java8新增的Predicate操作集合
- Java的jdbc使用addBatch进行批处理操作的几种方式
- 使用POI操作Excel时new XSSFWorkbook ()报错java.lang.NoSuchMethodError解决方式
- java程序使用纯JDBC方式操作SQLServer2005数据库(无需配置数据源)
- java 四种xml操作方式的基本使用方法
- java 演示使用jdbc-odbc桥连接的方式操作数据库 向数据库中添加数据
- Java_集合操作_使用细节
- Java中对XML四种操作方式的使用