这是我参与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));
}
}
二分查找
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));
}
}
如果找到数据,返回下标
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());
}
}
}
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();
}
}