JAVA基础:System类,Runtime类,Arrays类的常用方法,二分查找算法

news2024/9/20 13:30:25

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 ;

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2149031.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

射击靶标检测系统源码分享

射击靶标检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Vis…

pytorch-AutoEncoders实战之VAE

目录 1. VAE回顾2. KL的计算公式3. 构建网络4. 模型训练 1. VAE回顾 VAE Variational Auto Encoder&#xff0c;变分自编码器。是一种常见的生成模型&#xff0c;属于无监督学习的范畴。它能够学习一个函数/模型&#xff0c;使得输出数据的分布尽可能的逼近原始数据分布&…

CCRC-CDO首席数据官:未成年人首次上网年龄持续降低

近日&#xff0c;中国社会科学院新闻与传播研究所联合社会科学文献出版社发布了《青少年蓝皮书&#xff1a;中国未成年人互联网运用报告(2024)》&#xff0c;该报告对中国未成年人的互联网使用情况进行了全面的研究和专项汇报。 调查数据透露&#xff0c;未成年人接触网络的年…

光耦选型 | 充电领域使用光耦型号推荐——晶体管光耦KL3H7

在充电领域&#xff0c;光耦作为一种常见的光电耦合器件&#xff0c;通常用于电气隔离、信号传输、电池保护和充电控制等方面。 电源气隔离&#xff1a;光耦可用于实现电源气隔离&#xff0c;将输入和输出电路进行隔离&#xff0c;提高系统的安全性和稳定性。 信号传输&#…

0基础也可以转行做产品经理吗?

转行成为产品经理&#xff0c;即使没有相关工作经验或技术背景&#xff0c;仍然是一个可行的目标。产品经理的职责多样&#xff0c;但成功的产品经理通常需要具备一系列的技能和素养&#xff0c;包括项目管理、市场分析、用户体验设计等。在没有相关经验的情况下&#xff0c;通…

动手学深度学习PyTorch 第 1 章 引言

在线电子书 深度学习介绍 安装 使用conda环境 conda create -n d2l-zh python3.8 pip安装需要的包 pip install jupyter d2l torch torchvision下载代码并执行 wget https://zh-v2.d2l.ai/d2l-zh.zip unzip d2l-zh.zip jupyter notebookpip install rise如果不想使用jupyt…

建筑企业有闲置资质怎么办?

在建筑行业中&#xff0c;企业可能会因为业务调整、市场变化或战略转型而拥有一些不再使用的资质。这些闲置的资质如果得不到合理处理&#xff0c;不仅会造成资源浪费&#xff0c;还可能影响企业的合规性。因此&#xff0c;建筑企业在面对闲置资质时&#xff0c;需要采取合适的…

《微信小程序实战(3) · 推广海报制作》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; CSDN入驻不久&#xff0c;希望大家多多支持&#xff0c;后续会继续提升文章质量&#xff0c;绝不滥竽充数…

C++ 9.19

练习&#xff1a;要求在堆区申请5个double类型的空间&#xff0c;用于存储5名学生的成绩。请自行封装函数完成 1> 空间的申请 2> 学生成绩的录入 3> 学生成绩的输出 4> 学生成绩进行降序排序 5> 释放申请的空间 主程序中用于测试上述函数 #include<ios…

选址模型 | 基于混沌模拟退火粒子群优化算法的电动汽车充电站选址与定容(Matlab)

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于混沌模拟退火粒子群优化算法的电动汽车充电站选址与定容&#xff08;Matlab&#xff09; 问题建模&#xff1a;首先&#xff0c;需要将电动汽车充电站选址与定容问题进行数学建模&#xff0c;确定目标函数和约束…

双指针 -- 移动零、复写零、快乐数

目录 移动零 题解&#xff1a; 复写零 题解&#xff1a; 快乐数 题解&#xff1a; 盛最多水的容器 移动零 283. 移动零 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/move-zeroes/description/ 题解&#xff1a; 题目要求我们把数组中的 0 放…

大数据新视界 --大数据大厂之DevOps与大数据:加速数据驱动的业务发展

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

ReentrantLock实现原理

ReentrantLock是基于AQS实现的可重入锁&#xff0c;比synchronized更灵活&#xff0c;可以设置超时时间&#xff0c;可以中断&#xff0c;支持公平和非公平锁两种方式。公平锁获取锁的方式&#xff1a; 主要就是这三步 第一步&#xff1a;tryAcquire 先尝试获得锁 先获取state&…

Flux【真人模型】:高p高糊反向真实质感!网图风格的Lora模型,超逼真的AI美女大模型!

大家好&#xff0c;我是画画的小强 今天和大家分享一款基于Flux训练的网图风格的lora模型&#xff1a;墨幽-F.1-Lora-网图&#xff0c;该Lora模型由墨幽团队出品&#xff0c;旨在生成高p高糊的反向真实质感图片&#xff0c;而非真实摄影图片。不过&#xff0c;在自己出图过程中…

Linux操作系统 进程(3)

接上文 Linux进程优先级之后&#xff0c;我们了解到僵尸进程与孤儿进程的形成原因&#xff0c;既然是因为父进程没有接收子进程的退出状态导致的&#xff0c;那么我们该如何去获取子进程的退出状态呢&#xff1f;那本篇文章将围绕这个问题来解释进程。 环境 &#xff1a; vsco…

更高效的搜索工具,国内免费好用的AI智能搜索引擎工具

搜索引擎是我们获取信息的重要渠道&#xff0c;然而由于搜索引擎搜索结果存在较多的广告以及一些无关内容&#xff0c;这使我们的搜索效率变得更低效。小编就和大家分享几款国内免费好用的AI智能搜索工具&#xff0c;提高搜索效率。 1.开搜AI搜索 开搜AI搜索是一款基于深度学…

【学术会议:中国杭州,机器学习和计算机应用面临的新的挑战问题和研究方向】第五届机器学习与计算机应用国际学术会议(ICMLCA 2024)

您的学术研究值得被更多人看到&#xff01; 在这里&#xff0c;我为您提供精准的会议推荐&#xff0c;包括水利土木工程、计算机科学、地球科学、机械自动化、材料与制造技术、经管金融、人文社科等主流学科相关领域的国际会议。快速的稿件录用和高效的检索服务将确保您的研究…

30个小米集团芯片工程师岗位面试真题

在竞争激烈的半导体行业&#xff0c;小米集团作为全球知名的科技公司&#xff0c;对于芯片工程师的选拔标准自然也是极为严格。本篇分享一份《30个小米集团芯片工程师岗位面试真题》&#xff0c;通过对这30道真题的深入分析&#xff0c;我们可以一窥小米对于芯片设计人才的期待…

缓存数据和数据库数据一致性问题

根据以上的流程没有问题&#xff0c;但是当数据变更的时候&#xff0c;如何把缓存变到最新&#xff0c;使我们下面要讨论的问题 1. 更新数据库再更新缓存 场景&#xff1a;数据库更新成功&#xff0c;但缓存更新失败。 问题&#xff1a; 当缓存失效或过期时&#xff0c;读取…

Web后端服务平台解析漏洞与修复、文件包含漏洞详解

免责申明 本文仅是用于学习检测自己搭建的Web后端服务平台解析漏洞、文件包含漏洞的相关原理,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》‌及其所在国…