我是靠谱客的博主 高挑自行车,最近开发中收集的这篇文章主要介绍Java - 【集合框架二:List】Collections,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Collections工具类

  • 拷贝(浅拷贝)
    • copy
    • List的addAll也是浅拷贝
    • 如何实现深拷贝呢? →   序列化
  • 倒置
    • reverse
  • 排序 + List自身排序API
    • sort
  • 交换
    • swap
  • 乱序
    • shuffle
  • 二分查找
    • binarySearch

一:测试用例

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

/**
 * 测试Collections工具类操作List
 */
public class CollectionsTest {
    public static void main(String[] args) {
        // test1();
        // test2();
        // test3();

        List<Person> list1 = new ArrayList<>();
        list1.add(new Person("小明",12,"男"));
        list1.add(new Person("小绿",17,"女"));
        List<Person> list2 = null;
        try {
            list2 = deepCopy(list1);
        } catch (IOException|ClassNotFoundException e) {
            e.printStackTrace();
        }
        list1.get(0).setGender("女");
        System.out.println(list1);
        System.out.println(list2);
    }

    private static void test1() {
        List<String> list1 = new ArrayList<>();
        list1.add("AAA");
        list1.add("DDD");
        list1.add("YYY");
        list1.add("CCC");
        list1.add("RRR");
        System.out.println(list1);

        /* 使用Collections测试 */
        // 集合拷贝
        //      注意:
        //          1. copy比较的是size而不是capacity
        //          2. 浅拷贝 -> test2证明
        List<String> list2 = new ArrayList<>();
        Collections.addAll(list2,new String[list1.size()]);
        Collections.copy(list2,list1);
        System.out.println(list2);

        // 集合倒置
        Collections.reverse(list1);
        System.out.println(list1);

        // 集合排序
        Collections.sort(list1);
        System.out.println(list1);
        Collections.sort(list1, Comparator.reverseOrder());
        list1.sort(Comparator.reverseOrder());
        System.out.println(list1);

        // 集合元素交换
        Collections.swap(list1,0,list1.size()-1);
        System.out.println(list1);

        // 集合乱序
        Collections.shuffle(list1);
        System.out.println(list1);

        // 集合二分查找
        Collections.sort(list1);
        System.out.println(Collections.binarySearch(list1, "RRR"));
    }

    /**
     * Collections.copy浅拷贝证明
     */
    private static void test2(){
        List<Person> list1 = new ArrayList<>();
        list1.add(new Person("小明",12,"男"));
        list1.add(new Person("小绿",17,"女"));


        List<Person> list2 = new ArrayList<>();
        Collections.addAll(list2,new Person[list1.size()]);
        Collections.copy(list2,list1);
        System.out.println(list1);
        System.out.println(list2);
        list1.get(0).setGender("女");
        System.out.println(list1);
        System.out.println(list2);
    }

    /**
     * List的addAll方法也是浅拷贝!
     */
    private static void test3(){
        List<Person> list1 = new ArrayList<>();
        list1.add(new Person("小明",12,"男"));
        list1.add(new Person("小绿",17,"女"));
        List<Person> list2 = new ArrayList<>();
        list2.addAll(list1);
        System.out.println(list1);
        System.out.println(list2);

        list1.get(0).setGender("女");
        System.out.println(list1);
        System.out.println(list2);
    }


    private static <T> List<T> deepCopy(List<T> list) throws IOException, ClassNotFoundException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(baos);
        oos.writeObject(list);
        ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
        ObjectInputStream ois = new ObjectInputStream(bais);
        List<T> o = (List<T>) ois.readObject();
        return o;
    }
}

二:List自身sort方法

在这里插入图片描述

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

/**
 * 测试List的sort方法
 */
public class ListSortTest {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(56);
        list.add(45);
        list.add(89);
        list.add(17);

        list.sort((a,b)->a-b);
        System.out.println(list);

        list.sort(Comparator.reverseOrder());
        System.out.println(list);

        list.sort(Integer::compareTo);
        System.out.println(list);

        list.sort((a,b)->-1);
        System.out.println(list);
    }
}






在这里插入图片描述

最后

以上就是高挑自行车为你收集整理的Java - 【集合框架二:List】Collections的全部内容,希望文章能够帮你解决Java - 【集合框架二:List】Collections所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(68)

评论列表共有 0 条评论

立即
投稿
返回
顶部