1 System类
System.exit(0); //手动关闭应用程序
System.currentTimeMillis(); //获得当前系统时间的毫秒数
System.out ; //获得一个打印流,可以实现控制台打印
System.out.print(); //打印内容(不换行)
System.out.println();//打印内容,并换行
System.out.printf() ;//格式化打印
System.out.printf("我的名字:%s,我的年龄:%d" , "dongmingyu",18);
System.err ; //获得一个错误信息打印流,打印的内容在idea中都是红色的。
2 垃圾回收
-
当一个对象不再被其他变量引用的时候,就称该对象为垃圾对象
A a = new A(); A a2 = a ; a = null ; a2 = null ;
-
JVM判断对象是否为垃圾的算法
-
计数法
-
根可达算法
-
-
-
JVM会自动的进行垃圾回收(有一定的触发条件)
-
我们可以通过调用
System.gc()
手动启动垃圾回收机制 -
我们可以通过重写每一个对象
finalize()
方法,监控该对象是否被垃圾回收了-
finalize()
object类中的一个protected方法 -
当对象被垃圾回收时自动调用的方法
-
-
垃圾复活
-
在对象第一次被当作垃圾,准备垃圾回收时,会先调用该对象的finalize方法
-
可以在finalize方法中实现对象复活(重新被引用)
-
对象复活后,如果再次称为垃圾,被回收时不再重复调用finalize方法。
-
3 Runtime类
-
在java程序中运行java命令 (javac , java)
Runtime runtime = Runtime.getRuntime() ;
System.out.println(runtime.totalMemory());
System.out.println(runtime.maxMemory());
System.out.println(runtime.freeMemory());
runtime.exec("javac c:/z/A.java");
runtime.exec("java -cp c:/z A");
4 Arrays类
-
针对于数组操作相关的工具类,提供了一些操作数组的方法
public class Test5 { public static void main(String[] args) { int[] nums = new int[]{10,20,30,40,50}; //将数组转换成String String s = Arrays.toString(nums) ; System.out.println(s); //将nums数组扩容到2倍新数组中 nums = Arrays.copyOf(nums, nums.length * 2) ; System.out.println(Arrays.toString(nums)); //数组排序 nums = new int[]{6, 10 , 30,26,15} ; System.out.println(Arrays.toString(nums)); Arrays.sort(nums); System.out.println(Arrays.toString(nums)); //对象数组排序,要求对象自身可以比较 或者 提供第三方比较器 A[] as = new A[]{ new A(10,"zhangsan"), new A(20,"lisi"), new A(15,"wangwu"), new A(8,"zhaoliu") }; Arrays.sort(as , new AComparaTor()); for(int i=0;i<as.length;i++){ A a = as[i]; System.out.printf("num:%d , name:%s \n" , a.num,a.name); } nums = new int[]{10,20,30,40,50}; //如果查找的数据存在,返回其位置 //如果查找的数组不存在,返回其应该存在的位置的相反数再-1 //底层使用的是二分查找算法,所以要确保存储的元素有序,存储的元素可以比较大小(对象) int i = Arrays.binarySearch(nums, 40); System.out.println(i); } } class A implements Comparable<A>{ int num ; String name ; public A(int num,String name){ this.num = num ; this.name = name ; } @Override public int compareTo(A o) { return this.num - o.num; } } class AComparaTor implements Comparator<A>{ @Override public int compare(A o1, A o2) { return o2.num - o1.num; } }
5 System.arraycopy方法
-
该方法可以实现数组元素的移动
-
既可以从A数组移动到B数组
-
也可以从A数组的a位置,移动到A数组的b位置
-
-
一共有5个参数
//1 要移动元素的数组,源数组 //2 要移动元素的起始位置 //3 要移动元素的目标数组 //4 移动到目标数组中的位置 //5 移动元素的个数 int[] nums = new int[]{10,20,30,40,50,0,0} ; System.arraycopy(nums,1,nums,2,4); nums[1] = 100 ; System.out.println(Arrays.toString(nums)); System.arraycopy(nums,1,nums,0,6); System.out.println(Arrays.toString(nums));
6 二分查找算法
-
要求在一个有序数列中,查找指定的元素
-
注意:如果数列中的元素是对象类型,要求对象可以大小比较。
-
二分查找机制:
-
每次都找到当前数列的中间位置的元素,与待查找的元素比较
-
相等,找到了元素
-
不相等,根据大小比较结果
-
如果待查找的元素比中间位置的元素小,准备去左侧继续查找
-
如果待查找的元素比中间位置的元素大,准备去右侧继续查找
-
-
结束条件
-
找到元素,就停止查找
-
每次元素查找不存在时,就会对接下来的查找数列进行压缩
当数列的两个边界交叉时,表示已经没有元素了
-
-
0 1 2 3 4 5 6 7 8 9 1 3 5 7 9 15 20 25 30 100 找 9 第1次,找到中间位置 left=0 , right=9 , mid=4--> 9 < 30 , 继续向右找 第2次,找到中间位置 left=5 , right=9 , mid=7--> 25<30 , 继续向右找 第3次,找到中间位置 left=8 , right=9 , mid=8---> 30=30 找到 找2 第1次 left=0,right=9,mid=4---9 > 2 继续向左找 第2次 left=0,right=3,mid=1-->3 > 2 继续向左找 第3次 left=0,right=0,mid=0-->1 < 2 继续向右找 第4次 left=1,right=0,结束了 找24 1 left=0,right=9,mid=4-->9<24 --> 2 left=5,right=9,mid=7--->25>24 <-- 3 left=5,right6,mid=5--->15<24 --> 4 left=6,right6,mid=6--->20<24 --> 5 left=7,right=6,结束 return -left - 1 ;
那么今天的内容就到这里啦,如果存在哪些疑问或问题欢迎大家指出,我们下期再见~
标签:Java,nums,Arrays,System,数组,left,out From: https://blog.csdn.net/a2018204587/article/details/144191192