zoukankan      html  css  js  c++  java
  • Arrays工具类详解

    简述

      Arrays 是JDK提供的操作数组的工具类,array类提供许多操作数组的静态方法。

    Arrays.toStirng()

      Arrays.toString()方法可以把数组内各元素值拼接为字符串

    int[] arr1 = {1,2,3,4,5};
    System.out.println(Arrays.toString(arr1));

    拷贝数组  

      数组除了用clone方法拷贝,还可以用Arrays工具类的copyOf()和copyOfRange()进行拷贝。

      copyOf()第一个参数为要拷贝的数组,第二个参数为新数组的长度

    int[] arr1 = {1,2,3,4,5};
    int[] arr2 = Arrays.copyOf(arr1, 10);
    System.out.println(Arrays.toString(arr2));

       copyOfRange(x,l,r)意味将数组x的[l,r)区间拷贝出来

    int[] arr1 = {1,2,3,4,5};
    int[] arr2 = Arrays.copyOfRange(arr1, 1,3);
    System.out.println(Arrays.toString(arr2));

    排序

      Arrays.sort(arr);方法会将数组进行升序排序

    int[] arr1 = {6,3,2,1,5};
    Arrays.sort(arr1);
    System.out.println(Arrays.toString(arr1));

      如果要进行自定义排序,如果数组内元素类型是对象,则需要实现Comparable接口并重写compareTo方法。

      该方法的返回值是 int 。如果返回值为正数,则表示当前对象(调用该方法的对象)比 obj 对象“大”,放在右边。反之“小”,放在左边。如果为零的话,则表示两对象相等。

      如果是基本类型,则只能为升序,若要降序或者其他自定义规则排序,我们不能重写compareTo方法因为我们不能动JDK里的类,则需要在第二个参数传一个Comparator类用于设定比较规则。

      例如我们要安装绝对值大小进行升序排序,同理返回负数代表t1在左边,正数代表t1在右边

    Integer[] arr = {-6,-4,3,7,2};
    Arrays.sort(arr,new Comparator<>(){
        @Override
        public int compare(Integer t1, Integer t2) {
            if(Math.abs(t1) < Math.abs(t2)) return -1;
            return 1;
        }
    });
    System.out.println(Arrays.toString(arr));

    比较数组

      数组的equals并没有进行重写,所以比较的是地址值

      Arrays提供equals静态方法用于比较两数组内元素值是否一致

    Integer[] arr1 = {-6,-4,3,7,2};
    Integer[] arr2 = {-6,-4,3,7,2};
    System.out.println(arr1.equals(arr2));
    System.out.println(Arrays.equals(arr1, arr2));

     二分查找

      int binarySearch(Array[] array, int fromIndex, int toIndex, data key),参数2和3可以省略

      在array数组内在[fromIndex,toIndex)下标内查询key,若找到则返回key在数组中的索引值

    Integer[] arr1 = {1,2,3,4,5};
    int i = Arrays.binarySearch(arr1,2);
    System.out.println(i);

       若没找到则返回-(插入位置的索引+1)

    Integer[] arr1 = {1,3,3,4,5};
    int i = Arrays.binarySearch(arr1,2);
    System.out.println(i);

     

    一点一点积累,一点一点蜕变!
  • 相关阅读:
    2017.10.16 java中getAttribute和getParameter的区别
    2017.10.15 解析Java中抽象类和接口的区别
    2017.10.14 Java的流程控制语句switch&&随机点名器
    2017.10.13 Java中引用类型变量的创建及使用&循环高级写法
    2017.10.12 Java的计数器的开发
    2017.10.11 ”学生身体体质信息管理系统“的开发
    2017.10.10 java中的继承与多态(重载与重写的区别)
    一次redis悲观锁 实现 微信jssdk token缓存
    HashSet原理 与 linkedHashSet
    jdk并发容器整理(yet)
  • 原文地址:https://www.cnblogs.com/qq2210446939/p/15048625.html
Copyright © 2011-2022 走看看