Java基础 -- List集合
- 1. Introduction
 - 1.1 好处
 - 1.2 常用泛型
 
- 2. 交集,差集等
 - 2.1 自身的方法
 - 2.2 1.8jdk stream 新特性
 - 2.3 Apache的CollectionUtils工具类(推荐)
 
- 3. 限定泛型范围
 - 4. Awakening
 

 

1. Introduction
1.1 好处
- 代码复用,多种数据类型执行相同的代码
 - 在编译期间可以检查类型是否安全,报警ClassCastException,类型转无法转换,同时所有强制性类型转换都是自动和隐式进行的,提高了代码的安全性和重用性
 - 提高代码的可读性
 
1.2 常用泛型
2. 交集,差集等
2.1 自身的方法
    @Test
    void demo02() {
        String[] arrayA = new String[] { "1", "2", "3", "4"};
        String[] arrayB = new String[] { "3", "4", "5", "6" };
        List<String> listA = Arrays.asList(arrayA);
        List<String> listB = Arrays.asList(arrayB);
        //1、交集
        List<String>  jiaoList = new ArrayList<>(listA);
        jiaoList.retainAll(listB);
        System.out.println(jiaoList);
        //输出:[3, 4]
        //2、差集
        List<String>  chaList = new ArrayList<>(listA);
        chaList.removeAll(listB);
        System.out.println(chaList);
        //输出:[1, 2]
        //3、并集 (先做差集再做添加所有)
        List<String>  bingList = new ArrayList<>(listA);
        bingList.removeAll(listB); // bingList为 [1, 2]
        bingList.addAll(listB);  //添加[3,4,5,6]
        System.out.println(bingList);
        //输出:[1, 2, 3, 4, 5, 6]
    }
 
2.2 1.8jdk stream 新特性
    @Test
    void demo02() {
        String[] arrayA = new String[]{"1", "2", "3", "4"};
        String[] arrayB = new String[]{"3", "4", "5", "6"};
        List<String> listA = Arrays.asList(arrayA);
        List<String> listB = Arrays.asList(arrayB);
        // 交集
        List<String> intersection = listA.stream().filter(item -> listB.contains(item)).collect(toList());
        System.out.println(intersection);
        //输出:[3, 4]
        // 差集 (list1 - list2)
        List<String> reduceList = listA.stream().filter(item -> !listB.contains(item)).collect(toList());
        System.out.println(reduceList);
        //输出:[1, 2]
        // 并集 (新建集合:1、是因为不影响原始集合。2、Arrays.asList不能add和remove操作。
        List<String> listAll = listA.parallelStream().collect(toList());
        List<String> listAll2 = listB.parallelStream().collect(toList());
        listAll.addAll(listAll2);
        System.out.println(listAll);
        //输出:[1, 2, 3, 4, 3, 4, 5, 6]
        // 去重并集
        List<String> list = new ArrayList<>(listA);
        list.addAll(listB);
        List<String> listAllDistinct = list.stream().distinct().collect(toList());
        System.out.println(listAllDistinct);
        //输出:[1, 2, 3, 4, 5, 6]
    }
 
2.3 Apache的CollectionUtils工具类(推荐)
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
            <version>4.1</version>
        </dependency>
 
    @Test
    void demo02() {
        String[] arrayA = new String[] { "1", "2", "3", "4"};
        String[] arrayB = new String[] { "3", "4", "5", "6" };
        List<String> listA = Arrays.asList(arrayA);
        List<String> listB = Arrays.asList(arrayB);
        //1、并集 union
        System.out.println(CollectionUtils.union(listA, listB));
        //输出: [1, 2, 3, 4, 5, 6]
        //2、交集 intersection
        System.out.println(CollectionUtils.intersection(listA, listB));
        //输出:[3, 4]
        //3、交集的补集(析取)disjunction
        System.out.println(CollectionUtils.disjunction(listA, listB));
        //输出:[1, 2, 5, 6]
        //4、差集(扣除)
        System.out.println(CollectionUtils.subtract(listA, listB));
        //输出:[1, 2]
    }
 
3. 限定泛型范围
<? extends Parent> 指定了泛型类型的上限<? super Child> 指定了泛型类型的下届<?> 指定了没有限制的泛型类型
4. Awakening
在一秒钟内看到本质的人和花半辈子也看不清一件事本质的人,自然是不一样的命运。




















