Java之Collections工具类方法使用以及源码分析(四)
来源:互联网 发布:单片机 如何打印二维码 编辑:程序博客网 时间:2024/04/28 14:03
static <T> void copy(List<? super T> dest, List<? extends T> src) 将所有元素从一个列表复制到另一个列表。
这个copy有点不便利使用:
package com.daxin.collections;import java.util.ArrayList;import java.util.Arrays;import java.util.Collections;public class Main11 {public static void main(String[] args) {ArrayList<Integer> list = new ArrayList<>();for (int i = 1; i <= 5; i++) {list.add(i);}System.out.println(list.size() + 1);// 报错:Exception in thread "main" java.lang.IndexOutOfBoundsException:// Source does not fit in dest,报错原因是容量和大小概念的混淆// ArrayList<Integer> copy = new ArrayList<>(list.size());System.out.println("-------------------------正确使用:------------------------------------");//将copy大小设置为list.size(),并且每一个元素位置填充0ArrayList<Integer> copy = new ArrayList<>(Arrays.asList(new Integer[list.size()]));System.out.println(copy.size());System.out.println(list.size());Collections.copy(copy, list);System.out.println(copy);}}
重点:不要混淆容量和大小的关系,大小永远小于等于容量!
static boolean disjoint(Collection<?> c1, Collection<?> c2) 如果两个指定 collection 中没有相同的元素,则返回 true。
package com.daxin.collections;import java.util.ArrayList;import java.util.Collections;public class Main12 {public static void main(String[] args) {ArrayList<Integer> list1 = new ArrayList<>();for (int i = 1; i <= 5; i++) {list1.add(i);}ArrayList<Integer> list2 = new ArrayList<>();for (int i = 6; i <= 10; i++) {list2.add(i);}ArrayList<Integer> list3 = new ArrayList<>();for (int i = 2; i <= 6; i++) {list3.add(i);}System.out.println(Collections.disjoint(list1, list2));System.out.println(Collections.disjoint(list2, list3));System.out.println(Collections.disjoint(list1, list3));}}
源码分析:
public static boolean disjoint(Collection<?> c1, Collection<?> c2) {Collection<?> contains = c2; //set或者是size较大的集合Collection<?> iterate = c1;if (c1 instanceof Set) {//如果c1是setiterate = c2;contains = c1;} else if (!(c2 instanceof Set)) {//c1和c2都不是set的话int c1size = c1.size();int c2size = c2.size();if (c1size == 0 || c2size == 0) {//都空直接返回truereturn true;}if (c1size > c2size) {iterate = c2;contains = c1;}}//上面主要保证的是contains引用的size较大的集合或者为set的集合for (Object e : iterate) {//对少的元素进行遍历判断是否包含if (contains.contains(e)) {return false;}}return true;}看注释!!!
emptyList()方法使用:
package com.daxin.collections;import java.util.Collections;public class Main13 {public static void main(String[] args) {Collections.emptyList();//一般适用于返回值为List的方法作为null时候的返回值,可以避免空指针异常//返回的就是java.util.Collections.EmptyList<E>,自行查看源码便知道,就是对原有的list方法进行约束}}
static <K,V> Map<K,V> emptyMap() 返回空的映射(不可变的)。
static <T> Set<T> emptySet() 返回空的 set(不可变的)。
以上方法同理,不解释!static <T> Set<T> emptySet() 返回空的 set(不可变的)。
0 0
- Java之Collections工具类方法使用以及源码分析(四)
- Java之Collections工具类方法使用以及源码分析(一)
- Java之Collections工具类方法使用以及源码分析(二)
- Java之Collections工具类方法使用以及源码分析(三)
- Java Collections Framework之Collections源码分析(基于JDK1.6)
- 【java编程】Collections工具类之复写reserve方法
- 【Java源码分析】集合框架-Collections工具类-Arrays工具类
- 集合框架源码分析四(Collections类详细分析)
- 集合框架源码分析四(Collections类详细分析)
- Java 常用工具类 Collections 源码分析
- Java 常用工具类 Collections 源码分析
- Java 常用工具类 Collections 源码分析
- Java 常用工具类 Collections 源码分析
- Java 常用工具类 Collections 源码分析
- Java 常用工具类 Collections 源码分析
- Java集合工具类Collections常用方法
- 黑马程序员——Java之集合框架工具类Collections、Arrays以及Java新特性
- java学习之Collections工具类
- 用OpenGL画五角星时产生的奇奇怪怪的东西
- android DatePicker样式设置
- 谷哥的小弟学后台(34)——MyBatis概述
- php flock 独占使用
- A. Pupils Redistribution
- Java之Collections工具类方法使用以及源码分析(四)
- A Tutorial on Clustering Algorithms
- pta 是否完全二叉搜索树 (树的遍历)
- 《Java高并发程序设计》总结--4. 锁的优化及注意事项
- 如何讲故事
- UVA 821 Page Hopping (Floyd)
- 操作系统之处理机调度
- react-native 使用AsyncStorage实现长登陆
- 蓝桥杯ADV-88——算法提高 输出正反三角形