首页 > 其他分享 >操作集合的工具类:Collections(以及将线程变安全的synchronized方法)

操作集合的工具类:Collections(以及将线程变安全的synchronized方法)

时间:2024-08-20 20:58:01浏览次数:8  
标签:synchronized list1 List Collections list 线程 static public

   静态成员方法:
        public static <T> void sort(List<T> list) 升序
        public static <T> int binarySearch(List<?> list,T key) 二分查找
        public static <T> T max(Collection<?> coll)找最大值
        public static void reverse(List<?> list)反转
        public static void shuffle(List<?> list)随机排序

相关用法如下:

public class CollectionsDemo {
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("hello");
        list1.add("world");
        list1.add("hadoop");
        list1.add("apple");
        System.out.println("list1: "+list1);
        System.out.println("--------------------------");

        Collections.sort(list1);  //对List集合进行升序排序
        System.out.println("list1: "+list1);

        //list1: [apple, hadoop, hello, world]
        //public static <T> int binarySearch(List<?> list,T key) 在针对List集合中二分查找某个元素,返回该元素的下标索引
        System.out.println(Collections.binarySearch(list1,"hello"));

        //public static <T> T max(Collection<?> coll)
        System.out.println(Collections.max(list1));

       //public static void reverse(List<?> list) 将集合元素反转
        Collections.reverse(list1);
        System.out.println("list1: "+list1);

        //public static void shuffle(List<?> list) 将List集合元素进行随机打乱,每次运行结果都不一样
        Collections.shuffle(list1);
        System.out.println("list1: "+list1);


        //即便Vector是线程安全的,我们今后也不用
        //原因是我们可以通过Collections工具类对ArrayList或其他不安全的集合做操作,变成安全的。
        List<String> list2 = Collections.synchronizedList(list1);
        //后续用list2,跟不安全的用法一毛一样,没有任何区别,只是后续这个List集合是安全的了。



    }
}

2、可以将不安全的集合变成安全的

static <T> Collection<T> synchronizedCollection(Collection<T> c) 
返回由指定集合支持的同步(线程安全)集合。
  
static <T> List<T> synchronizedList(List<T> list) 
返回由指定列表支持的同步(线程安全)列表。  

static <K,V> Map<K,V> synchronizedMap(Map<K,V> m) 
返回由指定地图支持的同步(线程安全)映射。  

static <T> Set<T> synchronizedSet(Set<T> s) 
返回由指定集合支持的同步(线程安全)集。  

标签:synchronized,list1,List,Collections,list,线程,static,public
From: https://blog.csdn.net/ABU009/article/details/141200847

相关文章

  • 线程(Thread)的使用方法和锁(同步代码块,lock锁)的问题
    多线程:    进程:      正在运行的程序,是系统进行资源分配和调用的独立单位。      每一个进程都有它自己的内存空间和系统资源。      理解:一个正在运行的软件    线程:      是进程中的单个顺序控制流,是......
  • tcp多个客户端访问服务端,运用多线程
    客户端packagecom.shujia.day20.tcpdemo3;importjava.io.InputStream;importjava.io.OutputStream;importjava.net.Socket;importjava.util.Scanner;/*1:建立客户端的Socket服务,并明确要连接的服务器。2:如果连接建立成功,就表明,已经建立了数据传输的通......
  • Java笔试面试题AI答之线程(2)
    文章目录7.如何确保N个线程可以访问N个资源同时又不导致死锁?1.资源排序与顺序访问2.资源分配策略3.避免占用并等待4.引入超时机制5.死锁检测与解决6.使用高级并发工具7.编程实践8.Java方法可以同时即是static又是synchronized的吗?9.什么是Java多线程同步?10......
  • Java线程池详解
    Java线程池详解线程池解释线程池采用了池化思想,能够有效的管理线程的生命周期,减少了每次获取资源的消耗,提高了资源的利用率。类似池化实现还有数据库连接池、HTTP连接池等好处减少了线程创建和销毁的开销提高了响应速度使得线程更加方便管理常见使用场景量大处理时间......
  • 【Redis】Redis线程与IO模型—(三)
    Redis线程与IO模型一、Redis单线程二、多路复用机制三、Redis6.0多线程特性四、IO多线程配置一、Redis单线程通常说Redis是单线程,主要是指Redis的网络IO和键值对读写是由一个线程来完成的,其他功能,比如持久化、异步删除、集群数据同步等,是由额外的线......
  • 多任务进程与线程
    多任务进程与线程一、多任务介绍​ 我们生活中有很多事情是同时进行的,比如开车的时候手和脚共同来驾驶汽车,再比如唱歌跳舞也是同时进行的;用程序来模拟:fromtimeimportsleepdefsing():foriinrange(3):print("正在唱歌...%d"%i)sleep(1)defda......
  • show processlist查看Mysql当前正在运行的线程
    showprocesslistshowprocesslist;--或者SELECTid,db,user,host,command,time,state,infofrominformation_schema.PROCESSLISTWHERE1=1--andcommand!='Sleep'ANDHOSTLIKE'%localhost%'orderbytimedescID定义:每个连......
  • 线程池
    `usingBogus;usingMicrosoft.EntityFrameworkCore;usingMicrosoft.EntityFrameworkCore.Infrastructure;usingMicrosoft.EntityFrameworkCore.Storage;usingMicrosoft.Extensions.DependencyInjection;usingNewtonsoft.Json;usingSystem;usingSystem.Collecti......
  • 两线程读写数组
    #include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<unistd.h>#defineARRAY_SIZE10intshared_array[ARRAY_SIZE];pthread_mutex_tmutex;void*write_data(void*arg){intthread_id=*(int*)arg;......
  • 面试场景题:一次关于线程池使用场景的讨论。
    你好呀,我是歪歪。来一起看看一个关于线程池使用场景上的问题,就当是个场景面试题了。问题是这样的:字有点多,我直接给你上个图你就懂了:前端发起一个生成报表页面的请求,这个页面上的数据由后端多个接口返回,另外由于微服务化了,所以数据散落在每个微服务中,因此需要调用多个下游接......