Java程序设计 Arrays数组操作类、UUID无重复数据、ThreadLocal类

180 阅读2分钟

这是我参与2022首次更文挑战的第16天,活动详情查看:2022首次更文挑战

Java程序设计 Arrays数组操作类、UUID无重复数据、ThreadLocal类

Arrays数组操作类

专门实现数组操作

常见方法:

方法作用
public static void sort(数据类型[] 变量)数组排序
public static int binarySearch(数据类型 [] 变量,数据类型 key)利用二分查找算法进行数据查询
public static int compare(数据类型 [] 变量,数据类型 [] 变量)比较两个数组的大小,大于返回1 小于返回-1 等于返回0
public static boolean equals(数据类型 [] 变量,数据类型 [] 变量)数组相等判断
public static void fill(数据类型 [] 变量, 数据类型 变量)数组填充
public static String toString(数据类型 [] 变量)数组转为字符串

演示:

import java.util.Arrays;

public class Hello {
    public static void main(String[] args) throws Exception{
        int A[] = {1,2,3,4,5};
        int B[] = {1,2,3,4,5};
        int C[] = new int[3];
        System.out.println(Arrays.equals(A,B));
        Arrays.fill(C,0);
        System.out.println(Arrays.toString(C));
    }
}

image-20220201170756788

二分查找

import java.util.Arrays;
public class Hello {
    public static void main(String[] args) {
        int A[] = {0,1,2,4,3,5,6};
        Arrays.sort(A);
        for(int x:A){
            System.out.print(x+" ");
        }
        System.out.println();
        System.out.println(Arrays.binarySearch(A,2));
        System.out.println(Arrays.binarySearch(A,9));
    }
}

image-20220201172321431

如果找到数据,返回下标

UUID无重复数据

UUID(Universally Unique Identifier,通用唯一识别码)是一种利用时间戳、时钟序列、硬件识别号等随机生成的唯一编码的技术,利用此编码形式可以帮助开发者避免重复信息编号的出现。

常用方法

方法作用
public static UUID randomUUID()生成一个随机的UUID数据
public static UUID fromString(String name)通过指定格式的字符串获取UUID数据

演示:

import java.util.UUID;

public class Hello {
    public static void main(String[] args) {
        UUID id = UUID.randomUUID();
        System.out.println(id.toString());
        for(int i=0;i<10;i++){
            System.out.println(UUID.randomUUID().toString());
        }
    }
}

image-20220201194828721

ThreadLocal类

在多线程并发执行中,为了可以准确地实现每个线程中的数据成员访问,可以通过java.lang.ThreadLocal类实现数据的保存与获取。

方法作用
public void set(T value)保存数据
public T get()获取数据
public void remove()删除当前线程保存的数据

在ThreadLocal类中主要就是进行数据的保存、获取与删除操作

ThreadLocal最大的特点就是可以同时保存多个线程的数据,由于每个数据都有对应的当前线程对象,这样就可以保证数据传输的正确性,可以简单地把ThreadLocal想象成一个储物柜,把每一个操作储物柜的客户想象为一个线程,每个线程都只允许操作自己的储物柜,这样就保证了存储物品的安全。

class Mess{
    private String info;

    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }
}
class Channel{
    private static final ThreadLocal<Mess> THREAD_LOCAL = new ThreadLocal<Mess>();
    private Channel(){};
    public static void setMess(Mess m){
        THREAD_LOCAL.set(m);
    }
    public static void send(){
        System.out.println(Thread.currentThread().getName()+":"+THREAD_LOCAL.get().getInfo());
    }
}
public class Hello {
    public static void main(String[] args) {
        new Thread(()->{
            Mess msg = new Mess();
            msg.setInfo("A");
            Channel.setMess(msg);
            Channel.send();
        },"发送者A").start();
        new Thread(()->{
            Mess msg = new Mess();
            msg.setInfo("B");
            Channel.setMess(msg);
            Channel.send();
        },"发送者B").start();
    }
}

image-20220202092258320