获取两个集合中不同的元素
前言
对于两个list、或者set集合中,获取其中不同元素方法的获取这块,因为自己工作上有所涉及,所以自己针对这块进行总结,希望能为其他小伙伴有所帮助!
一、代码块内容
(1).封装工具类代码块
import java.util.*;
/**
* @ClassName: ElenmentUnits
* @Description:
* @Author: songwp
* @Date: 8:13 2022/7/6
**/
public class ElenmentUnits {
/**
* 获取两个List的不同元素
* @param list1
* @param list2
* @return
*/
public List<String> getListDiffrent(List<String> list1, List<String> list2){
Map<String,Integer> map = new HashMap<String,Integer>(list1.size()+list2.size());
List<String> diff = new ArrayList<String>();
List<String> maxList = list1;
List<String> minList = list2;
if(list2.size()>list1.size()){
maxList = list2;
minList = list1;
}
for (String string : maxList){
map.put(string, 1);
}
for (String string : minList){
Integer cc = map.get(string);
if(cc!=null){
map.put(string, ++cc);
continue;
}
map.put(string, 1);
}
for(Map.Entry<String, Integer> entry:map.entrySet()){
if(entry.getValue()==1)
{
diff.add(entry.getKey());
}
}
return diff;
}
/**
* 获取两个集合中不同的元素
* @param arr1
* @param arr2
*/
public void getSetDiffrent(Integer[] arr1, Integer[] arr2) {
Set<Integer> set1 = new HashSet<>(Arrays.asList(arr1));
Set<Integer> set2 = new HashSet<>(Arrays.asList(arr2));
Set<Integer> set3 = new HashSet<>(set2);
//set集合有去重特性
set3.addAll(set1);
//retainAll():保留包含在指定 collection 中的元素
set1.retainAll(set2);
// removeAll(); 移除 set 中那些包含在指定 collection 中的元素
set3.removeAll(set1);
System.out.println(set3);
}
}
(2).测试类代码块
public static void main(String[] args) {
ElenmentUnits elenmentUnits = new ElenmentUnits();
/**
* 1.获取两个数组中不同的元素
*/
Integer nums1[] = {1, 2, 3, 5, 7, 23};
Integer nums2[] = {16, 18, 2, 5, 12, 3,23};
System.out.println("获取两个数组中不同的元素:");
elenmentUnits.getSetDiffrent(nums1, nums2);
/**
* 2.获取两个List的不同元素
*/
List<String> list1 =new ArrayList<String>();
for(int i=1;i<10;i++) {
list1.add(i+"");
}
List<String> list2 =new ArrayList<String>();
for(int i=5;i<10;i++) {
list2.add(i+"");
}
//方法一
List<String> list3 = elenmentUnits.getListDiffrent(list1,list2);
System.out.println(list1);
System.out.println(list2);
System.out.println("方法1--获取两个List的不同元素:\n"+list3);
//方法二
List<String> list4 =new ArrayList<String>();
List<String> list5 =new ArrayList<String>();
list1.forEach(l1->{
if(list2.contains(l1)){
// 获取相同同的元素
list4.add(l1);
}else {
// 获取不同的元素
list5.add(l1);
}
});
System.out.println("获取两个List的相同的元素:\n"+list4);
System.out.println("方法2--获取两个List的不同元素:\n"+list5);
}
二、控制台输出
1.获取两个数组中不同的元素:
[16, 1, 18, 7, 12]
2.方法1--获取两个List的不同元素:
[1, 2, 3, 4]
3.获取两个List的相同的元素:
[5, 6, 7, 8, 9]
4.方法2--获取两个List的不同元素:
[1, 2, 3, 4]
古今成大事者,不唯有超世之才,必有坚韧不拔之志!

浙公网安备 33010602011771号