JAVA程序:字符串数组交集、并集和差集
2016-06-27 21:54
761 查看
package cn.yuhui.com; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; public class jaccard { public static void main(String[] args) { work(); } public static void work(){ List<String> liOne = new ArrayList<String>(); liOne.add("a b c d"); liOne.add("e g i w"); liOne.add("c j k x"); liOne.add("d k r y"); liOne.add("q r s t"); liOne.add("u v w x"); liOne.add("g n u v"); liOne.add("c d e f"); liOne.add("a h i j"); liOne.add("k l m n"); List<String> liTwo = new ArrayList<String>(); liTwo.add("a h o v"); liTwo.add("b i p w"); liTwo.add("c j q x"); liTwo.add("d k r y"); liTwo.add("e l s z"); liTwo.add("f m w x"); liTwo.add("g n u v"); liTwo.add("c d e f"); liTwo.add("g h i j"); liTwo.add("a l m o"); for (int i = 0; i < liOne.size(); i++) { String[] arr1 = liOne.get(i).split(" "); String[] arr2 = liTwo.get(i).split(" "); relativelycompare(arr1 , arr2); } } public static void relativelycompare(String[] arr1 ,String[] arr2 ){ System.out.print("File01内容为:"); ArrayToPrin(arr1); System.out.print(" || File02内容为:"); ArrayToPrin(arr2); //求两个数组的交集 Map<String, Boolean> map = new HashMap<String, Boolean>(); LinkedList<String> listjiaoji = new LinkedList<String>(); for (String str : arr1) { if (!map.containsKey(str)) { map.put(str, Boolean.FALSE); } } for (String str : arr2) { if (map.containsKey(str)) { map.put(str, Boolean.TRUE); } } for (Entry<String, Boolean> e : map.entrySet()) { if (e.getValue().equals(Boolean.TRUE)) { listjiaoji.add(e.getKey()); } } System.out.print(" || 交集为:"); ListToPrin(listjiaoji); //求两个字符串数组的并集,利用set的元素唯一性 List<String> listbingji = new ArrayList<String>(); Set<String> set = new HashSet<String>(); for (String str : arr1) { set.add(str); } for (String str : arr2) { set.add(str); } Iterator<String> iterator1 = set.iterator(); while(iterator1.hasNext()){ listbingji.add(iterator1.next()); } System.out.print(" || 并集为:"); ListToPrin(listbingji); //求两个数组的差集 LinkedList<String> chaji = new LinkedList<String>(); LinkedList<String> history = new LinkedList<String>(); String[] longerArr = arr1; String[] shorterArr = arr2; //找出较长的数组来减较短的数组 if (arr1.length > arr2.length) { longerArr = arr2; shorterArr = arr1; } for (String str : longerArr) { if (!chaji.contains(str)) { chaji.add(str); } } for (String str : shorterArr) { if (chaji.contains(str)) { history.add(str); chaji.remove(str); } else { if (!history.contains(str)) { chaji.add(str); } } } System.out.print(" ||差集为:"); ListToPrin(chaji); System.out.println(); } public static void ListToPrin(List<String> list){ for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i)+" "); } } public static void ArrayToPrin(String[] arr){ for (String str : arr) { System.out.print(str+" "); } } }
相关文章推荐
- JavaOO项目TankWar 项目总结
- struts2配置文件的加载顺序以及 struts.xml package 的配置说明
- 第一次接触Spring
- java安全框架-Shiro学习笔记(四)-注解式授权+Jsp标签授权
- 《Java JD7 学习笔记》课后练习题3
- Windows Java EE 7 基本环境配置 及 错误解决
- 实现Runnable接口相对于继承Thread类的优点
- java 实现堆排序
- 深入理解Java中的流---结合Hadoop进行详解
- Spring AOP 实现
- 常用垃圾回收算法
- Word Count in Java language, 三种不同的方法
- java字符串判断汉字
- Java事务
- 自定义的RPC的Java实现
- Java泛型
- Java内存区域模型、对象创建过程、常见OOM
- java static
- java安全框架-Shiro学习笔记(三)-权限认证
- java synchronized详解