【JAVA学习之路 | 进阶篇】Collections工具类

简介: 【JAVA学习之路 | 进阶篇】Collections工具类

1.概念

参考操作数组的工具类 : Arrays.Collections在java.util包下,是操作集合框架(List, Set, Map等)的工具类.

2.常用方法(有个印象,不会就查API)

Collections提供了一系列静态(static)的方法对集合元素进行排序,查询和修改等操作,还提供了对集合对象设置不可变,对集合对象实现同步控制等方法.

方法较多,只截取了一部分.

(1). 排序操作


  • reverse(List list) 反转list中元素顺序.
  • shuffle(List list) 对list中的元素进行随机排序.
  • sort(List list) 按照元素的自然顺序对List中的元素按升序排序.
  • sort(List list, Comparator) 根据指定的Comparator的顺序对list中的元素排序.
  • swap(List list, int i, int j) 将list中第i个元素与第j个元素互换
@Test
    public void Test1() {
        List list = new ArrayList();
        list.add(12);
        list.add(78);
        list.add(67);
        list.add(45);
        list.add(56);
        list.add(34);
        list.add(23);
        for (Object obj : list) {
            System.out.print(obj + "\t");
        }
        System.out.println();
        Collections.reverse(list);
        for (Object obj : list) {
            System.out.print(obj + "\t");
        }
    }
 
控制台
12  78  67  45  56  34  23  
23  34  56  45  67  78  12
@Test
    public void test2() {
        List list = new ArrayList();
        list.add(12);
        list.add(78);
        list.add(67);
        list.add(45);
        list.add(56);
        list.add(34);
        list.add(23);
        //自然排序,按照升序排序
        Collections.sort(list);
        for (Object obj : list) {
            System.out.print(obj + "\t");
        }
        System.out.println();
        //定制排序,按照comparator指定的顺序排序
        Collections.sort(list, new Comparator(){
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof Integer && o2 instanceof Integer) {
                    Integer i1 = (Integer) o1;
                    Integer i2 = (Integer) o2;
                    return -(i1 - i2);
                }
                throw new RuntimeException();
            }
        });
        for (Object obj : list) {
            System.out.print(obj + "\t");
        }
    }
 
控制台
12  23  34  45  56  67  78  
78  67  56  45  34  23  12

(2). 查找


  • Object max(Collection collection)按照集合的自然顺序返回集合中最大的元素.实际上返回最右边的元素.
  • Object max(Collection collection, Comparator comparator) 按照comparator指定的顺序,返回集合中最大的元素.
  • Object min(Collection collection)按照集合的自然顺序返回集合中最小的元素.实际上返回最左边的元素.
  • Object min(Collection collection, Comparator comparator) 按照comparator指定的顺序,返回集合中最小的元素.

(3). 复制, 替换

  • void copy(List dest, List src) 将src的内容复制到dest上.该必须满足dest.size()不小于src.size().
  • boolean replaceAllList(List list, Object oldval, Object newval) 使用新的值替换list对象中所有的旧值.
  • 提供了多种unmodifiableXxx(),返回指定的Xxx不可变的视图对象.
@Test
    public void Test3() {
        List list = new ArrayList();
        list.add(12);
        list.add(78);
        list.add(67);
        list.add(45);
        list.add(56);
        list.add(34);
        list.add(23);
        //list1是不可变的List对象
        List list1 = Collections.unmodifiableList(list);
        //报错
        list1.add(23);
    }

(4). 同步

  • 提供了多种synchronizedXxx方法,该方法可将指定集合包装成线程安全的集合.其实源码就是用synchronized包了起来.
目录
打赏
0
1
1
0
6
分享
相关文章
列表结构与树结构转换分析与工具类封装(java版)
本文介绍了将线性列表转换为树形结构的实现方法及工具类封装。核心思路是先获取所有根节点,将其余节点作为子节点,通过递归构建每个根节点的子节点。关键在于节点需包含 `id`、`parentId` 和 `children` 三个属性。文中提供了两种封装方式:一是基于基类 `BaseTree` 的通用工具类,二是使用函数式接口实现更灵活的方式。推荐使用后者,因其避免了继承限制,更具扩展性。代码示例中使用了 Jackson 库进行 JSON 格式化输出,便于结果展示。最后总结指出,理解原理是进一步优化和封装的基础。
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
47 10
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
262 4
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
63 1
|
1月前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
172 60
【Java并发】【线程池】带你从0-1入门线程池
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
72 23
|
28天前
|
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
当我们创建一个`ThreadPoolExecutor`的时候,你是否会好奇🤔,它到底发生了什么?比如:我传的拒绝策略、线程工厂是啥时候被使用的? 核心线程数是个啥?最大线程数和它又有什么关系?线程池,它是怎么调度,我们传入的线程?...不要着急,小手手点上关注、点赞、收藏。主播马上从源码的角度带你们探索神秘线程池的世界...
98 0
【源码】【Java并发】【线程池】邀请您从0-1阅读ThreadPoolExecutor源码
Java社招面试题:一个线程运行时发生异常会怎样?
大家好,我是小米。今天分享一个经典的 Java 面试题:线程运行时发生异常,程序会怎样处理?此问题考察 Java 线程和异常处理机制的理解。线程发生异常,默认会导致线程终止,但可以通过 try-catch 捕获并处理,避免影响其他线程。未捕获的异常可通过 Thread.UncaughtExceptionHandler 处理。线程池中的异常会被自动处理,不影响任务执行。希望这篇文章能帮助你深入理解 Java 线程异常处理机制,为面试做好准备。如果你觉得有帮助,欢迎收藏、转发!
144 14
Java 面试必问!线程构造方法和静态块的执行线程到底是谁?
大家好,我是小米。今天聊聊Java多线程面试题:线程类的构造方法和静态块是由哪个线程调用的?构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节有助于掌握Java多线程机制。下期再见! 简介: 本文通过一个常见的Java多线程面试题,详细讲解了线程类的构造方法和静态块是由哪个线程调用的。构造方法由创建线程实例的主线程调用,静态块在类加载时由主线程调用。理解这些细节对掌握Java多线程编程至关重要。
64 13