【java】Collection的拼接和並集
阿新 • • 發佈:2019-02-02
集合操作常常需要進行一些如多個集合進行拼接,求並集,下面來看看怎麼做拼接和求並集
1.拼接(含重複元素並集,嚴格意義上並集不含重複元素)
實現一:
//採用Collection定義的方法addAll(),適用兩個集合進行拼接
A.addAll(B);
實現一的這種方式最終拼接的結果將放在A中,因此A放生改變了;如果要拼接的集合有幾十個,這也不是很方便。
下面我們自己來實現這個功能
實現二:
/**
* @author puyf
* @Description:拼接所有需要拼接的集合,輸入->輸出:Collection<K extends Collection<T>> ->> List<T>
* @param datas 泛型為K的集合(K是一個Collection的子集就行了,這樣datas中的元素K可以是List,可以是Set)
* @return 以List<T>的形式拼接所有集合
*/
public static <T, K extends Collection<T>> List<T> contact(Collection<K> datas) {
List<T> result = new ArrayList<>();
for (K k : datas) {
result.addAll(k);
}
return result;
}
/**
* @author puyf
* @Description:拼接所有需要拼接的集合,輸入->輸出:n個K(K滿足K extends Collection<T>) ->> List<T>
* @param datas 可變引數datas,datas的泛型為K(K是一個Collection的子集就行了,這樣datas中的元素K可以是List,可以是Set)
* @return 以List<T>的形式拼接所有集合
*/
public static <T, K extends Collection<T>> List<T> contact(K... datas) {
return contact(Arrays.asList(datas));
}
//測試
public static void main(String[] args) {
List<Integer> listdata1 = new ArrayList<>(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8}));
List<Integer> listdata2 = new ArrayList<>(Arrays.asList(new Integer[]{1,2,3,4,5,6,7,8}));
Set<Integer> set = new HashSet<>(Arrays.asList(new Integer[]{99,100}));
List<Collection<Integer>> input = new ArrayList<>();
input.add(listdata1);
input.add(listdata2);
input.add(set);
System.out.println("contact可以完成拼接功能:");
System.out.println(contact(input));
System.out.println(contact(listdata1,listdata2,set));
}
//測試結果如下:
contact可以完成拼接功能:
[1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 99, 100]
[1, 2, 3, 4, 5, 6, 7, 8, 1, 2, 3, 4, 5, 6, 7, 8, 99, 100]
2.並集
在集合拼接的基礎上進行去重即可(檢視集合的去重)