本文分享自華為云社區(qū)《如何用Java找出兩個List中的重復(fù)元素,讀這一篇就夠了》,作者: 努力的阿飛。
在Java編程中,我們經(jīng)常需要找出兩個列表(List)中的重復(fù)元素。在本文中,我們將探討三種方法來實現(xiàn)這一目標(biāo)。
方法一:使用HashSet
Java中的HashSet是一個不允許有重復(fù)元素的集合。我們可以利用這個特性,通過合并兩個List并計算差集,來找出重復(fù)的元素。
以下是一個通過使用HashSet數(shù)據(jù)結(jié)構(gòu)來找出兩個List中的重復(fù)元素的代碼示例。
// 類名:ListUtils // 函數(shù)名:findDuplicateElements // 函數(shù)功能:找出兩個List中的重復(fù)元素 // POM依賴包:無 import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; public class ListUtils { /** * 找出兩個List中的重復(fù)元素 * @param list1 第一個List * @param list2 第二個List * @return 重復(fù)的元素集合 */ public static <T> List<T> findDuplicateElements(List<T> list1, List<T> list2) { Set<T> set1 = new HashSet<>(list1); // 將List1轉(zhuǎn)換為Set,去除重復(fù)元素 Set<T> duplicateSet = new HashSet<>(); for (T element : list2) { // 遍歷List2的元素 if (set1.contains(element)) { // 如果Set1中包含List2的元素 duplicateSet.add(element); // 將重復(fù)的元素添加到重復(fù)元素的Set中 } } return new ArrayList<>(duplicateSet); // 將重復(fù)元素的Set轉(zhuǎn)換回List并返回 } } // 函數(shù)示例 // 找出兩個List中的重復(fù)元素示例 // 入?yún)ⅲ簂ist1,第一個List // list2,第二個List // 出參:duplicates,重復(fù)的元素集合 // 調(diào)用示例: // List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5); // List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8); // List<Integer> duplicates = ListUtils.findDuplicateElements(list1, list2); // System.out.println(duplicates); // 輸出結(jié)果:例如,第一個List為:[1, 2, 3, 4, 5],第二個List為:[4, 5, 6, 7, 8] // 則輸出結(jié)果為:[4, 5] ``` // 溫馨提示:以上代碼由 FuncGPT 生成,編譯打包請使用 ListUtils.java 文件。
以上代碼其實是由全棧式全自動開發(fā)工具-飛算SoFlu軟件機(jī)器人推出的轉(zhuǎn)出AI生成Java函數(shù)的FuncGPT(慧函數(shù))生成的,通過輸入簡單的指令“找出兩個List中的重復(fù)元素”,就秒級生成了以上代碼。
FuncGPT(慧函數(shù))使用HashSet數(shù)據(jù)結(jié)構(gòu)的這種方法的優(yōu)點是簡單且高效。此外,它返回了一個包含所有重復(fù)元素的List,方便進(jìn)一步處理。但需要注意的是,結(jié)果中的元素順序可能會發(fā)生變化。開發(fā)者可根據(jù)實際的需求,通過設(shè)置入?yún)?、出參,調(diào)整需求的方式,來優(yōu)化生成的代碼。
方法二:使用Stream API
Java 8引入了Stream API,使我們能夠更簡潔地處理集合。我們可以使用Stream API的distinct()方法來過濾掉重復(fù)的元素,然后通過filter()方法找出兩個List中的重復(fù)元素。
以下是一個通過使用Stream API來找出兩個List中的重復(fù)元素的代碼示例。
import java.util.*; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5); List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8); // 將列表轉(zhuǎn)換為Stream Stream<Integer> stream1 = list1.stream(); Stream<Integer> stream2 = list2.stream(); // 找出兩個Stream的重復(fù)元素 List<Integer> commonElements = Stream.concat(stream1, stream2) .distinct() .collect(Collectors.toList()); // 打印出重復(fù)元素 System.out.println(commonElements); } }
這種方法可以保留元素的原始順序,但需要注意處理大型數(shù)據(jù)集時的性能問題。
方法三:使用HashMap
我們也可以使用HashMap來找出兩個List中的重復(fù)元素。將每個元素作為鍵,將其出現(xiàn)的次數(shù)作為值存儲在HashMap中。然后,我們遍歷HashMap,找到出現(xiàn)次數(shù)大于1的元素,即為重復(fù)元素。
以下是一個通過使用HashMap來找出兩個List中的重復(fù)元素的代碼示例。
import java.util.*; public class Main { public static void main(String[] args) { List<Integer> list1 = Arrays.asList(1, 2, 3, 4, 5); List<Integer> list2 = Arrays.asList(4, 5, 6, 7, 8); // 將列表轉(zhuǎn)換為HashMap Map<Integer, Integer> map = new HashMap<>(); list1.forEach(i -> map.put(i, map.getOrDefault(i, 0) + 1)); list2.forEach(i -> map.put(i, map.getOrDefault(i, 0) + 1)); // 找出HashMap中值大于1的鍵,即為重復(fù)元素 List<Integer> commonElements = map.entrySet().stream() .filter(x -> x.getValue() > 1) .map(Map.Entry::getKey) .collect(Collectors.toList()); // 打印出重復(fù)元素 System.out.println(commonElements); } }
這種方法可以保留元素的原始順序,但在處理大型數(shù)據(jù)集時可能會消耗較多的內(nèi)存。
點擊關(guān)注,第一時間了解華為云新鮮技術(shù)~文章來源:http://www.zghlxwxcb.cn/news/detail-711420.html
?文章來源地址http://www.zghlxwxcb.cn/news/detail-711420.html
到了這里,關(guān)于3種方法,用Java找出兩個List中的重復(fù)元素的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!