• 29 常用工具类(一)


    29常用工具类(一)

    1.Arrays------处理数组

    1.1 copyOf方法

    底层实现:调用System.arrayCopy

    public static int[] copyOf(int[] original, int newLength) {
            int[] copy = new int[newLength];
            System.arraycopy(original, 0, copy, 0,
                             Math.min(original.length, newLength));
            return copy;
        }
    
    //补充说明
    //实参为int数组类型copeOf的一段源代码
    //其实在Arrays类的源码中,有8种基本数据类型数组所对应的copeOf方法,其核心是调用了System.arraycopy方法
    //Arrays类中copyOf的返回值为实参所对应的基本数据类型数组,如上面源码返回的是int[]的数组
    //Arrays类中copeOf与System.arraycopy的区别如下
       1.Arrays类的copeOf方法本质是调用System.arraycopy方法实现的
       2.Arrays类中的copeOf可以实现8种基本数据类型数组的复制,且返回的是一个新数组的地址;
       3.System.arrayCopy方法无返回值,底层是用native关键字修饰的方法(原生态方法),即调用非java语言的方法
       4.System要求复制时自己创建一个新数组,然后当成实参传进去
    
    //运行实例
     int[] nums={1,66,4,3,-2};                                                           
     int[] nums01=Arrays.copyOf(nums,nums.length+1);//第二个参数为复制后的长度               
     System.out.println("新数组如下所示");                           
     for (int i = 0; i < nums01.length; i++) {                                           
        System.out.print(nums01[i]+"	");                                               
     }                                                                                   
    

    1.2 toString方法(以字符串的形式打印数组元素的内容)

    本质:是调用Arrays类中自己写的静态方法

    public static String toString(int[] a) {
            if (a == null)
                return "null";
            int iMax = a.length - 1;
            if (iMax == -1)
                return "[]";
    
            StringBuilder b = new StringBuilder();
            b.append('[');
            for (int i = 0; ; i++) {
                b.append(a[i]);
                if (i == iMax)
                    return b.append(']').toString();
                b.append(", ");
            }
        }
        //StringBuffer虽然安全但是效率不高,StringBuilder不安全但是效率高,所以综合多方
    
    //运行实例
    int[] nums={1,66,4,3,-2};                                     
    System.out.println("采用toString方法打印的数组:"+Arrays.toString(nums));   
    

    1.3 sort方法(默认升序,快排)

     int nums[]={1,8,99,40,77};                            
     Arrays.sort(nums);//原数组会通过快速排序原理完成升序操作                
     for (int num : nums) {                                
         System.out.print(num+"	");                       
     }
     //sort方法返回值为void
    

    1.4 fill方法(将数组里面的值全部赋值成同一个)

    //源码如下:(有多个重载fill方法,选了一个)
    public static void fill(long[] a, long val) {
            for (int i = 0, len = a.length; i < len; i++)
                a[i] = val;
    }
    
    int[] nums={1,66,4,3,-2};                 
    Arrays.fill(nums,100);                     
     for (int i = 0; i < nums.length; i++) {   
        System.out.print(nums[i]+"	");        
     }
     //fill方法返回值为void
    

    2.System类(系统工具类)

    2.1 退出程序(exit)

    作用:终止当前正在执行的java虚拟机(非0为异常终止)

    本质是调用Runtime类中的exit方法

    //System.exit源码如下:
    public static void exit(int status) {
          Runtime.getRuntime().exit(status);
    }
    //Runtime.getRuntime() 返回值为与当前java应用程序相关的Runtime对象
    //Runtime对象实例在每个java应用程序中都会有一个,其作用是使应用程序能够与其运行的环境相连接
    //注意:应用程序不能创建自己的Runtime类实例
    //Runtime类中的源码如下:
      public static Runtime getRuntime() {
            return currentRuntime;
     }
     //这个currentRuntime已经实例化过了(47行)
     exit方法源码
    public void exit(int status) {
            SecurityManager security = System.getSecurityManager();
            if (security != null) {
                security.checkExit(status);
            }
            Shutdown.exit(status);
    }
    

    2.2 获取当前时间(距离1900年1月1号的毫秒值,1s=1000毫秒)

     System.out.println(System.currentTimeMillis());
     //通过两次获取时间,然后相减,可以得到程序某一部分的运行时间
    

    2.3 数组的赋值(手动扩容)

    System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

    src代表源数组的地址,dest代表目标数组的地址;

    srcPos源数组获取替换元素(让另外一个元素被替换)的起始部分,destPos目标数组替换的起始位置(被替换元素替换)

    length为替换的总长度

       int[] a={1,8,99,66};
       int[] b=new int[4];
       //替换元素为1,8,99
       //被替换起始位置为b[1]
       System.arraycopy(a,0,b,1,a.length-1);
       for (int i = 0; i < b.length; i++) {
           System.out.print(b[i]+"	");
       }
       //第一个未赋值,系统会自动赋一个默认值
    

    3.Date类 (与SimpleDateFormat类搭配使用)

    ​ 默认创建对象,为当前时间

    使用方法如下所示:

    步骤一  实例化一个Date对象
    步骤二  实例化一个SimpleDateFormat对象,把需要的格式给输进去
    步骤三   调用format方法(打印出当前时间)----返回的是String类型的日期信息
    

    (用String变量来装着它)

     Date date = new Date();
     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM//dd HH:mm:ss");
     String str=simpleDateFormat.format(date);
    System.out.println(str);
    

    4.Calendar

    //locale为语言环境,TImezone为时区

    输出日历相关信息的操作流程如下所示:

     第一步.声明一个日历对象,指向一个日历,该日历是通过getInstance静态方法获取默认时区和语言环境的日历,
    第二步,根据需求,通过get方法获取你想要获取的信息(年、月、日、周)---->给定日历字段的值
     注意:这些日历字段都是全局常量(static final)
    
    Calendar calendar=Calendar.getInstance();         
    System.out.println(calendar.get(Calendar.DAY_OF_MONTH));//这个月的第几天       
    System.out.println(calendar.get(Calendar.DAY_OF_WEEK));//这周星期几       
    System.out.println(calendar.get(Calendar.DAY_OF_YEAR));//一年的第几天
    
  • 相关阅读:
    数据结构
    ADC
    SPI
    定时器原理
    IO中断
    恩智浦样片申请
    UART
    随机生成数字验证码
    判断网络是否连接Internet
    清理SQL数据库日志
  • 原文地址:https://www.cnblogs.com/SSSzhanglingzhi/p/14094951.html
Copyright © 2020-2023  润新知