首页 > 编程语言 >Java入门:21.System类,Runtime类,Arrays类的常用方法,二分查找算法

Java入门:21.System类,Runtime类,Arrays类的常用方法,二分查找算法

时间:2024-12-02 16:34:13浏览次数:9  
标签:Java nums Arrays System 数组 left out

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判断对象是否为垃圾的算法

      1. 计数法

      2. 根可达算法

  • 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 二分查找算法

  • 要求在一个有序数列中,查找指定的元素

  • 注意:如果数列中的元素是对象类型,要求对象可以大小比较。

  • 二分查找机制:

    • 每次都找到当前数列的中间位置的元素,与待查找的元素比较

    • 相等,找到了元素

    • 不相等,根据大小比较结果

      • 如果待查找的元素比中间位置的元素小,准备去左侧继续查找

      • 如果待查找的元素比中间位置的元素大,准备去右侧继续查找

    • 结束条件

      1. 找到元素,就停止查找

      2. 每次元素查找不存在时,就会对接下来的查找数列进行压缩

        当数列的两个边界交叉时,表示已经没有元素了

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

相关文章

  • springboot框架下基于Java Web的新能源汽车信息咨询系统设计与实现
    内容概要:本文介绍了基于springboot框架和JavaWeb技术的新能源汽车信息咨询服务的设计与实现。系统采用B/S架构,使用MySQL数据库,旨在提高用户体验,简化管理和操作流程。系统主要功能包括个人信息管理、品牌类别管理、新能源汽车信息展示、汽车订单和配送订单管理等,还增加了首页推......
  • JavaScript操作数组
    数组的遍历、插入、删除操作在JavaScript中,数组是一种常见的数据结构,可以包含多个元素,并且可以进行遍历、插入和删除等操作。下面分别介绍数组的遍历、插入和删除操作。1,数组的判断:代码不能操作空对象(空指针),在操作数组之前,一般建议先判断数组是否为空。letarr=[1,2,3];/......
  • JavaScript操作addEventListener监听触发事件
    JavaScript的addEventListener方法允许你为指定的HTML元素添加事件监听器。以下是一些常见的事件类型,可以使用addEventListener来监听它们:1,点击事件(click)点击事件(click):当用户点击元素时触发。element.addEventListener('click',function(){console.log......
  • 跨语言国密SM4加解密实战:Java与Golang无缝对接
    概述本文详细介绍了如何在Java和Golang中使用SM4算法进行对称加密和解密操作。通过使用CBC模式和PKCS5填充,成功实现了跨语言的数据加密和解密。无论是Java加密后在Golang解密,还是Golang加密后在Java解密,均通过了测试验证,保证了两种语言在处理国密SM4算法时的兼容性和一致性。前......
  • 突击检查:Java面试之多线程&并发篇(10)
    前言本来想着给自己放松一下,刷刷博客,突然被几道面试题难倒!说说CyclicBarrier和CountDownLatch的区别?什么是AQS?了解Semaphore吗?什么是Callable和Future?什么是阻塞队列?阻塞队列的实现原理是什么?如何使用阻塞队列来实现生产者-消费者模型?似乎有点模糊了,那就大概看一下面试题吧。好记......
  • JavaScript操作DOM元素的classList
    在JavaScript中,classList是一个DOM元素属性,它提供了一组方法来添加、移除和切换元素的类名。classList属性返回一个DOMTokenList集合,表示元素的类名。这个集合提供了几个非常有用的方法,我们可以方便地对元素的类名进行操作,包括添加、移除、切换类名等。1,添加类名add(class1......
  • P1746 离开中山路 JAVA题解 (广搜和双向广搜优化)
    题目背景《爱与愁的故事第三弹·shopping》最终章。题目描述爱与愁大神买完东西后,打算坐车离开中山路。现在爱与愁大神在 x1,y1x1​,y1​ 处,车站在 x2,y2x2​,y2​ 处。现在给出一个 n×n(n≤1000)n×n(n≤1000) 的地图,00 表示马路,11 表示店铺(不能从店铺穿过),爱与愁......
  • 1100 道 Java 面试题(含答案)
    2025年马上快到了,发现网上很多Java面试题都没有答案,所以花了很长时间搜集整理出来了这套Java面试题大全~这套互联网Java工程师面试题包括了:MyBatis、ZK、Dubbo、EL、Redis、MySQL、并发编程、Java面试、Spring、微服务、Linux、Springboot、SpringCloud、MQ、Kafka面试专题......
  • 基于Java+SpringBoot+Vue的前后端分离的口腔管家平台
    基于Java+SpringBoot+Vue的前后端分离的口腔管家平台前言✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌......
  • 基于Java+SpringBoot+Vue的前后端分离的垃圾分类网站
    基于Java+SpringBoot+Vue的前后端分离的垃圾分类网站前言✌全网粉丝20W+,csdn特邀作者、博客专家、CSDN[新星计划]导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌......