Java常用工具类

1.Collections

Java提供了一个操作SetListMap等集合的工具类:Collections,该工具类里提供了大量方法对集合元素进行排序、查询和修改等操作,还提供了对集合对象实现同步控制等方法。

1.1排序方法
  • Collections.reverse(List list):反转指定列表中元素的顺序。
public static void reverse(List<?> list) {}
  • Collections.shuffle(List list):使用默认随机源对指定列表进行置换。
public static void shuffle(List<?> list) {}    //完全随机
  • Collections.shuffle(List list,Random rnd):指定随机种子,种子相同时得到结果相同。
public static void shuffle(List<?> list, Random rnd) {}  //指定随机种子,种子相同时得到结果相同
  • Collections.sort(List list):根据元素的自然顺序对指定列表按升序进行排序。如果List泛型中的类实现了Comparable接口并重写了compareTo方法则按照该类的比较方法进行比较。
public static <T extends Comparable<? super T>> void sort(List<T> list) {}
  • Collections.sort(List list, Comparator c):根据指定比较器产生的顺序对指定列表进行排序。
public static <T> void sort(List<T> list, Comparator<? super T> c) {}

//例如
Collections.sort(intList,(a,b)->b-a);
  • Collections.swap(List list, int i, int j):将List中第i位于第j位交换。
public static void swap(List<?> list, int i, int j) {}
  • Collections.rotate(List list,int distance):根据指定的距离轮换指定列表中的元素。具体算法参考:https://www.dazhuanlan.com/2020/02/12/5e439bc422226/
public static void rotate(List<?> list, int distance) {}
1.2查找和替换
  • binarySearch(List list, T key):使用二分搜索法搜索指定列表,以获得指定对象。
  • binarySearch(List list, T key,Comparator c):使用二分搜索法搜索指定列表,以获得指定对象。
  • max(Collection coll):根据元素的自然顺序,返回给定 collection 的最大元素。
  • max(Collection coll,Comparator c):根据指定比较器产生的顺序,返回给定 collection 的最大元素。
  • min(Collection coll):根据元素的自然顺序,返回给定 collection 的最小元素。
  • min(Collection coll,Comparator c):根据指定比较器产生的顺序,返回给定 collection 的最小元素。
  • fill(List list, T obj):使用指定元素替换指定列表中的所有元素。
  • frequency(Collection c, Object o):返回指定 collection 中等于指定对象的元素数。
  • indexOfSubList(List source, List target):返回指定源列表中第一次出现指定目标列表的起始位置;如果没有出现这样的列表,则返回 -1。
  • lastIndexOfSubList(List source, List target):返回指定源列表中最后一次出现指定目标列表的起始位置;如果没有出现这样的列表,则返回 -1。
  • replaceAll(List list, T oldVal, T newVal):使用另一个值替换列表中出现的所有某一指定值。

2.Arrays

Arrays类是java.util包中常用来操作数组的一个非常重要的类。

  • void sort(T[] a,Comparator<? super T> c):将数组进行排序,默认字典序排序(ASCII),也可以自己定义比较器。
  • List asList(T… a):该静态方法返回的是 Arrays 的内部静态类 ArrayList ,该类继承的是AbstractList 类,只重写了部分方法。如果使用此方法将数组转为List,实际上是转为了Arrays的内部类ArrayList,而非集合中的ArrayList,Arrays中的ArrayList继承了AbstractList抽象类,在AbstractList抽象类中调用add、remove方法时直接抛出异常,所以通过asList转化的List并不能实现add和remove方法。
  • binarySearch:二分查找。该方法调用前数组必须是已排序的,并且要查找元素在数组内唯一,否则结果可能不准确。如果找到指定元素,返回其索引值,否则返回一个负数。
  • T[] copyOf(T[] original,int newLength):拷贝数组,从下标 0 开始拷贝 newLength个元素,如果超过原数组长度,会用数组类型的默认值进行填充,其底层调用了System.arraycopy()方法。
  • T[] copyOfRange(T[] original,int from,int to):拷贝数组,从索引 form 开始, 到索引
    to – 1 结束,如果超出原数组范围,会用数组类型的默认值进行填充,其底层调用了System.arraycopy()方法。
  • boolean equals(Object[] a,Object[] b):可以比较基础类型和Object,比较两个数组是否相等,如果两个数组以相同顺序包含相同元素,则返回true,否则返回false。
  • boolean deepEquals(Object[] a1,Object[] a2):比较两个数组是否相等,如果两个数组以相同顺序包含相同元素,则返回true,否则返回false。但是和 equals()方法不同,deepEquals() 比较的是两个 Object 类型的数组,不能比较其他类型的数组。
  • fill(Object[] a,Object val):可以用于基础类型和Object,将数组中填充成同一个值。

3.Objects

3.1Object类

Object类是java默认的提供的一个类,Object类是所有类的父类,也就是说任何一个类的定义的时候如果没有明确的继承一个父类的话,那么它就是Object的子类;Object
类属于java.lang包,此包下的所有类在使用时无需手动导入,系统会在程序编译期间自动导入。

  • clone方法:保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。
  • getClass方法:final方法,返回Class类型的对象,反射来获取对象。
  • toString方法:该方法用得比较多,一般子类都有覆盖,来获取对象的信息。在使用对象直接输出的时候,默认输出的是一个对象在堆内存上的地址值;如若要输出该对象的内容,则要覆写toString方法。
  • finalize方法:该方法用于释放资源。因为无法确定该方法什么时候被调用,很少使用。
  • equals方法:比较对象的内容是否相等。基本数据类型的比较用 ==;引用类型数据比较:调用 equals()方法进行比较,可以进行覆写。
  • hashCode方法:该方法用于哈希查找,重写了equals方法一般都要重写hashCode方法。这个方法在一些具有哈希功能的Collection中用到。
  • wait方法:wait方法就是使当前线程等待该对象的锁,当前线程必须是该对象的拥有者,也就是具有该对象的锁。wait()方法一直等待,直到获得锁或者被中断。wait(long timeout)设定一个超时间隔,如果在规定时间内没有获得锁就返回。调用该方法后当前线程进入睡眠状态,直到以下事件发生。1.其他线程调用了该对象的notify方法。2.其他线程调用了该对象的notifyAll方法。3.其他线程调用了interrupt中断该线程。4.时间间隔到了。此时该线程就可以被调度了,如果是被中断的话就抛出一个InterruptedException异常。
  • notify方法:该方法唤醒在该对象上等待的某个线程。
  • notifyAll方法:该方法唤醒在该对象上等待的所有线程。
3.2Objects工具类

Objects类在java.util包中,属于Object的工具类。由于方法都由static修饰,直接用Objects调用即可。

  • Objects.equals(Object a,Object b):两个对象相等,根据a的equals方法(可能被重写)来判断是否相等。
  • Objects.deepEquals(Object a,Object b):主要针对数组对象,依次检查数组中所有对象是否都equals,实际上,通过调用Arrays.deepEquals,这一方法同样适用于多维数组。
  • Objects.hashCode(Object o):如果o不为空返回o的hashCode值,否则返回0。
  • Objects.hash(Object… values):返回可变参数(对象数组)的hashCode值,调用了Arrays.hashCode(values)。
  • Objects.toString(Object o):将o转为字符串,调用了String.valueOf(Object o)。
  • Objects.toString(Object o,String nullDefault):当对象为空时,返回一个默认的字Obj符串nullDefault。
  • Objects.compare(T a,T b,Comparator<? super T> c):调用对象c的比较方法,返回a与b的比较值。当然a与b指向一个对象时就默认相等。
  • Objects.requireNonNull(T obj):检查输入的指针是否为null,如果为空,抛出空指针异常(NullPointerException)。
  • Objects.requireNonNull(T obj,String message):自定义空指针异常中的抛出信息new
    NullPointerException(message)。
  • Objects.isNull(Object obj):判断obj是否为null,是null返回true,否则为false。
  • Objects.nonNull(Object obj):判断obj是否不是null,不是null返回true,否则为false。
  • Objects.requireNonNull(T obj, Supplier messageSupplier):requireNonNull就相当于是一个检查是否为null的过滤器,如果为null则抛出异常,反之返回原对象。如果重写了Supplier的get方法,则返回的消息为get方法的返回值。
public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
    if (obj == null)
        throw new NullPointerException(messageSupplier == null ?
                                       null : messageSupplier.get());
    return obj;
}
  • Objects.requireNonNullElse(T obj, T defaultObj):Java9引入,如果obj不为null返回obj,否则调用requireNonNull(defaultObj,“defaultObj”),如果defaultObj不为空时,返回defaultObj,否则抛出空指针异常,异常信息为字符串defaultObj。
public static <T> T requireNonNullElse(T obj, T defaultObj) {
    return (obj != null) ? obj : requireNonNull(defaultObj, "defaultObj");
}
  • Objects.requireNonNullElseGet(T obj, Supplier<? extends T> supplier):反复嵌套两次。
public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier) {
    return (obj != null) ? obj : requireNonNull(requireNonNull(supplier, "supplier").get(), "supplier.get()");
}

本人小白一个,如果有什么问题还请您在评论区留言!感谢
未完待续

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值