• JDK中工具类的使用


    JDK中内置了很多常用的工具类,且多以“s”结尾,如:集合工具类Collections,数组工具类Arrays,对象工具类Objects,文件工具类Files,路径工具类Paths,数学工具类Maths;但也有一些不是以“s”结尾的工具类,如TimeUnit和System。

    下面就简单介绍各工具类的用法。
    (1)Objects中定义很多有用的API,如空指针判断,对象相等比较等。比较常用的API有以下几个:
    ​ 用于判断两个对象是否相等,两个参数都可以为null
    ​ public static boolean equals(Object a, Object b)
     用于判断一个对象是否为空
    ​ public static boolean isNull(Object obj)
     用于判断一个对象是否不为空
     public static boolean nonNull(Object obj)
     用于对变量进行非空校验,如果为空则抛出空指针异常,不为空则返回此变量,还可以抛出指 定异常信息
     public static <T> T requireNonNull(T obj)
     public static <T> T requireNonNull(T obj, String message)

    ​ Objects使用示例:

     1     static void useObjects() {
     2         String str1 = null;
     3         String str2 = "Hello Java";
     4         
     5         // 判断str1与str2是否相等
     6         boolean equalFlag = Objects.equals(str1, str2);
     7         
     8         // 进行空指针判断,如果为null就会抛出空指针异常,否则返回原值
     9         str1 = Objects.requireNonNull(str1);
    10         str2 = Objects.requireNonNull(str2, "Str2 is null");
    11         
    12         // 判断str1是否为null
    13         boolean nullFlag = Objects.isNull(str1);
    14         // 判断str2是否为非空
    15         boolean nonNullFlag = Objects.nonNull(str2);
    16     }
    View Code

     

    (2)Arrays中定义了很多与数组相关API,常用的主要有一下几个API

      // 数组排序
      public static void sort(int[] a)
      // 二分法查找数组中的元素
      public static int binarySearch(long[] a, long key)
      // 判断两个数组是否相等(数组元素对应相等,且数组长度一致)
      public static boolean equals(long[] a, long[] a2)
      // 使用指定值填充数组
      public static void fill(long[] a, long val)
      // 复制数组
      public static <T> T[] copyOf(T[] original, int newLength)
      // 获取数组的hashCode
      public static int hashCode(long a[])
      // 将整个数组转化为形如:[a, b, c, ..., d]的格式的字符串
      public static String toString(int[] a)

      Arrays使用示例代码如下:

     1     static void useArrays() {
     2         int[] arr1 = {5, 3, 2, 1, 4};
     3         int[] arr2 = {5, 3, 2, 1, 4, 5};
     4         
     5         // 对arr1进行排序,默认是升序排序
     6         Arrays.sort(arr1);
     7         
     8         // 搜索2在arr1中的位置,返回索引值,arr1必须是有序的
     9         int index = Arrays.binarySearch(arr1, 2);
    10         
    11         // 判断arr1与arr2是否相等
    12         boolean equalFlag = Arrays.equals(arr1, arr2);
    13         
    14         int[] newArr = new int[10];
    15         // 使用10填充newArr数组
    16         Arrays.fill(newArr, 10);
    17         
    18         // 复制newArr的数组0--4的元素,并返回新数组
    19         int[] ansArr = Arrays.copyOf(newArr, 5);
    20         
    21         // 获得ansArr的hashCode
    22         int ansHashCode = Arrays.hashCode(ansArr);
    23         
    24         // 将ansArr转化为一个字符串
    25         String str = Arrays.toString(ansArr);
    26     }
    View Code

    (3)Collections中定义了许多集合常用的API,常用的API如下:
      // 对List进行排序
      public static <T extends Comparable<? super T>> void sort(List<T> list)
      // 二分法查找List中的元素索引值,List必须有序
      public static <T> int binarySearch(List<? extends Comparable<? super T>> list, T key)
      // 翻转List
      public static void reverse(List<?> list)
      // 寻找出List中的最小元素值
      public static <T extends Object & Comparable<? super T>>
      T min(Collection<? extends T> coll)
      // 寻找出List中的最大元素值
      public static <T extends Object & Comparable<? super T>>
      T max(Collection<? extends T> coll)

      Collections的使用示例代码如下:

     1     static void useCollections() {
     2         List<Integer> nums = new ArrayList<>();
     3         nums.add(1);
     4         nums.add(3);
     5         nums.add(2);
     6         nums.add(5);
     7         nums.add(4);
     8         // 对List中的元素进行排序
     9         Collections.sort(nums);
    10         
    11         // 寻找5在nums中的索引值
    12         int index = Collections.binarySearch(nums, 5);
    13         
    14         // 翻转nums
    15         Collections.reverse(nums);
    16         // 寻找出nums中的最小值
    17         Collections.min(nums);
    18         // 寻找出nums中的最大值
    19         Collections.max(nums);
    20     }
    View Code

    (4)Files中定义了许多常用的与文件相关的API,常用API如下:
      // 获取指定文件的字节输入流
      public static InputStream newInputStream(Path path, OpenOption... options)
      // 获取指定文件的字节输出流
      public static OutputStream newOutputStream(Path path, OpenOption... options)
      // 以指定编码获取指定文件的字符输入流
      public static BufferedReader newBufferedReader(Path path, Charset cs)
      // 以指定编码获取指定文件的字符输出流
      public static BufferedWriter
      newBufferedWriter(Path path, Charset cs, OpenOption... options)
      // 以指定编码获取一个文件中的所有内容,并以字符串流返回
      public static Stream<String> lines(Path path, Charset cs)
      // 创建文件
      public static Path createFile(Path path, FileAttribute<?>... attrs)
      // 创建路径
      public static Path createDirectory(Path dir, FileAttribute<?>... attrs)
      // 删除文件
      public static void delete(Path path)
      // 如果文件存在,则删除文件
      public static boolean deleteIfExists(Path path
      // 文件复制
      public static Path copy(Path source, Path target, CopyOption... options)
      // 文件移动
      public static Path move(Path source, Path target, CopyOption... options)

      Files使用示例代码如下:

     1     static void useFiles() throws IOException {
     2         Path dataPath = Paths.get("data.txt");
     3         // 获取字符输入流
     4         InputStream is = Files.newInputStream(dataPath);
     5         // 获取字符输出流
     6         OutputStream os = Files.newOutputStream(dataPath);
     7         // 获取字符输入流
     8         BufferedReader reader = Files.newBufferedReader(dataPath);
     9         // 获取字符输出流
    10         BufferedWriter writer = Files.newBufferedWriter(dataPath);
    11         // 获取文件中的所有内容,并以字符串流返回,每个字符串代表文件的一行文本
    12         Stream<String> lines = Files.lines(dataPath, Charset.forName("UTF-8"));
    13         
    14         // 创建一个文件路径
    15         Files.createDirectories(Paths.get("hello"));
    16         // 创建一个文件
    17         Files.createFile(Paths.get("config.txt"));
    18         
    19         // 删除文件或文件夹,如果不存在,则会抛出异常
    20         Files.delete(Paths.get("data.txt"));
    21         // 删除文件或文件夹,如果不存在则不会执行删除操作,也不会抛出异常
    22         Files.deleteIfExists(Paths.get("hello"));
    23         
    24         // 只能进行文件复制,不能进行文件夹复制
    25         Files.copy(Paths.get("1.txt"), Paths.get("2.txt"));
    26         
    27         // 文件或文件夹移动
    28         Files.move(Paths.get("SRC"), Paths.get("DES"));
    29     }
    View Code

    (5)Paths主要和Files,File搭配使用,没有什么需要讲的。

    (6)Maths主要封装了一些常用的与数学相关的操作,这是大家最为熟悉的工具类,也不需要讲解。

    (7)TimeUnit主要是线程sleep的时候比较方便:
      // 线程休眠5小时
      TimeUnit.HOURS.sleep(5);
      // 线程休眠5分钟
      TimeUnit.MINUTES.sleep(5);
      // 线程休眠5秒
      TimeUnit.SECONDS.sleep(5);

    (8)System也是大家比较熟悉的一个工具类,比如大家最常用的控制台输出就是用的
      System.out.println(),常用的API有:
      // 获取当前时间,值是以毫秒为单位
      public static native long currentTimeMillis()
      // 结束Java程序运行
      public static void exit(int status)
      // 数组复制
      public static native
      void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

      System使用示例代码如下:

     1     static void useSystem() {
     2         // 获取当前时间,单位是毫秒
     3         long time = System.currentTimeMillis();
     4         
     5         // 将数组1复制到数组2
     6         int[] arr1 = {1, 2, 3, 4, 5};
     7         int[] arr2 = new int[5];
     8         System.arraycopy(arr1, 0, arr2, 0, arr1.length);
     9         
    10         // 正常退出程序
    11         System.exit(0);
    12     }
    View Code

    本文章只是粗略的介绍了各工具类的用法,更详细的用法请观看相应的API文档。

    如有错误,敬请指出。

  • 相关阅读:
    算法(两数之和)
    算法(动态规划二)
    算法(动态规划一)n个学生问题
    Navigator 对象
    Window 对象
    JavaScript 运算符
    JavaScript 全局属性/函数
    JavaScript RegExp 对象
    JavaScript String 对象
    JavaScript Number 对象
  • 原文地址:https://www.cnblogs.com/wss-is-knight/p/4823382.html
Copyright © 2020-2023  润新知