java常用工具类和API
前言:本篇总结一些常用的工具类和api
1.0 StringBuilder
我们在处理字符串时,一般会使用StringBuilder,因为其提供了大量的API,并且效率要高于String
尤其是进行字符串拼接时,如果使用 String进行字符串拼接时,由于String和其他的封装类属于不可变数据类
型,所以对字符串的并不是在原有的基础上进行更改,而是不断产生新串的过程,不断的扔掉老对象,产生新的对
象,而StringBuilder 本质是一个容器,我们在进行拼接时是加在同一个对象中,所以相对String要快很多。所以
对字符串进行频繁修改时,更推荐使用StringBuilder
下面为一些基本运用
package com.example.StringBuilder;
public class MyStringBuilder {public static void main(String[] args) {StringBuilder sb = new StringBuilder();sb.append("Hello");System.out.println(sb);sb.reverse();System.out.println(sb);System.out.println(sb.length());sb.toString();System.out.println(sb);}
}
1.1 StringBuffer
StringBuffer和StringBuilder的用法是完全相同的,不过相比于StringBuilder,StringBuffer的线程更安全
1.2 实际使用
现在有一个要求,要求我们写出一个将数组转换为[1,2,3]
这种字符串格式的方法,我们利用StringBuilder来机
进行字符串拼接,并且实现该功能
package com.example.StringBuilder;
class MyArray{private int[] array=new int[10];private int size=0;public void add(int value){if(size<array.length){array[size]=value;size++;}}public String toString(){StringBuilder sb=new StringBuilder();sb.append("[");for(int i=0;i<size;i++) {sb.append(array[i]);if(i<size-1){sb.append(",");}}sb.append("]");return sb.toString();}}
public class MyStringBuilder {public static void main(String[] args) {MyArray arr=new MyArray();arr.add(10);arr.add(20);arr.add(30);System.out.println(arr);}
}
1.3 StringJoiner
StringJoiners是专门用来进行字符串拼接的工具类,使用该工具类可以使代码更简介。
同样是上面的代码,我们使用StringJoiner来进行简化,得到了下面的代码
package com.example.StringBuilder;import java.util.StringJoiner;class MyArray{private int[] array=new int[10];private int size=0;public void add(int value){if(size<array.length){array[size]=value;size++;}}public String toString(){StringJoiner sj=new StringJoiner(",","[","]");for(int i=0;i<size;i++){sj.add(String.valueOf(array[i]));}return sj.toString();}}
public class MyStringBuilder {public static void main(String[] args) {MyArray arr=new MyArray();arr.add(10);arr.add(20);arr.add(30);System.out.println(arr);}
}
我们在创建StringJoiner方法时就已经通过其构造器指明了分隔符,开始符号,结束符号,接下来直接add对象就
自动按照该格式拼接字符串,不过需要注意的是,在StringBuilder时,我们直接传入数字是可以的,因为对于
append()
方法,在StringBuilder类内部重载了append方法,对于各种类型的值加入都进行了处理,将其转化为
字符串并进行添加,因此我们直接传入数组的项是可以的,但对于StringJoiner的add方法,并没有进行重载,所
以我们只能传入字符值,因此需要使用valueOf
方法将数组中的项的值转换为字符串进行添加
1.4 Math
Math工具类提供一些对数据进行操作的静态方法
abs(x)
绝对值方法
ceil(x)
向上取整
floor(x)
向下取整
max(x,y)
取x,y较大值
min(x,t)
取x,y较小值
pow(x,y)
返回x的y次方
random()
返回0.0到1.0的一个随机数,不包括1.0
1.5 Runtime
Runtime表示程序所在的运行环境,Runtime是一个单例类,用于与JVM进行交互,通过getRuntime()
获得唯一
的Runtime实例,单例类指只有一个实现的类,通过类提供的静态方法获得该实现
首先我们来看exit方法,该方法用于关闭JVM虚拟机,传递状态码0代表正常结束
package com.example.StringBuilder;public class MyStringBuilder {public static void main(String[] args) {Runtime jre=Runtime.getRuntime();jre.exit(0);//终止当前虚拟机,传递的是状态码System.out.println("Hello World");}
}
因为虚拟机被终止了,所以后面的Hello World并没有被输出
还有一些其他的方法
package com.example.StringBuilder;import java.io.IOException;public class MyStringBuilder {public static void main(String[] args) {Runtime jre = Runtime.getRuntime();System.out.println("处理器数量" + jre.availableProcessors());System.out.println("空闲内存" + jre.freeMemory() / 1024 / 1024 + "M");System.out.println("总内存" + jre.totalMemory() / 1024 / 1024 + "M");try {jre.exec("calc");} catch (IOException e) {e.printStackTrace();}}
}
需要注意的是exec用于执行电脑中的程序,可能会爆出异常,所以要进行异常处理
1.6 System
System代表当前系统,也是一个工具类
package com.example.StringBuilder;public class MyStringBuilder {public static void main(String[] args) {//System.exit(0);//关闭虚拟机long time1 =System.currentTimeMillis();long x=0;for(int i=1;i<=1000000000;i++){x+=i;}long time2 =System.currentTimeMillis();System.out.println((time2-time1)/1000.0+"秒");}
}
我们可以用currentTimeMillis
方法来统计运行的时间。