JavaSE——Arrays类、System类

news2024/12/28 19:16:29

目录

一、Arrays类

1.Arrays.toString()

2.Arrays.sort()

3.Arrays实现冒泡排序的定制排序

4.Arrays.binarySearch()——二叉查找

5.Arrays.copyOf()——数组元素的复制

6.Arrays.fill()——数组的填充

7.Arrays.equals(arr1,arr2)——比较2个数组元素内容是否完全一致

8.Arrays.asList()——将一组值,转换成list

9.Arrays类练习题

二、System类

1.System.exit()

2.System.arrCopy()——数组拷贝

3.System.currentTimeMillis()——返回当前时间距离1970-1-1的毫秒数


一、Arrays类

1.Arrays.toString()

Integer[] integers = {1, 20, 90};
System.out.println(Arrays.toString(integers)); // [1,20,90]

2.Arrays.sort()

1. 可以直接使用冒泡排序 , 也可以直接使用Arrays.sort()方法排序
2. 因为数组是引用类型,所以通过sort排序后,会直接影响到实参
3. sort方法是重载的,也可以通过传入一个接口Comparator实现定制排序


4. 调用 定制排序 时,传入两个参数:

  • 排序的数组
  • 实现了Comparator接口的匿名内部类,要求实现compare方法

5. 这里体现了接口编程的方式,源码分析:
(1)

Arrays.sort(arr, new Comparator() {
      @Override
      public int compare(Object o1, Object o2) {
          Integer i1 = (Integer) o1;
          Integer i2 = (Integer) o2;
          return i2 - i1;
      }
 });

(2)最终到TimSort类

(3)执行到binarySort方法的代码,会通过匿名内部类的compare方法来决定排序的顺序

会根据动态绑定机制c.compare()执行我们传入的匿名内部类的compare()

(4) public int compare(Object o1, Object o2) 返回的值>0 还是 <0,会影响整个排序结果,这就充分体现了 接口编程+动态绑定+匿名内部类的综合使用。

3.Arrays实现冒泡排序的定制排序

public static void main(String[] args) {
        int[] arr = {1, -9, 5, 40, 6};
        bubble02(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Integer i1 = (Integer) o1;
                Integer i2 = (Integer) o2;
                return i2 - i1;
            }
        });
    }

    public static void bubble02(int[] arr, Comparator c) {
        int temp = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length - 1; j++) {
                // 数组的排序由c.compare(arr[j], arr[j + 1]) > 0 的返回值决定排序的顺序
                if (c.compare(arr[j], arr[j + 1]) > 0) {
                    temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

4.Arrays.binarySearch()——二叉查找

  1. 使用binarySearch通过二分搜索法进行查找
  2. 要求该数组必须有序,如果数组无序,不能使用binarySearch
  3. 如果数组中不存在该元素,则return -(low + 1);
int[] arr = {-9, 1, 5, 16, 40};
// 返回1的索引  1
System.out.println(Arrays.binarySearch(arr, 1)); 

// 当元素不在数组中,返回 - (该元素应该存在的索引 + 1)   -6
System.out.println(Arrays.binarySearch(arr, 100));

5.Arrays.copyOf()——数组元素的复制

public static void main(String[] args) {
    Integer[] arr = {-9, 1, 5, 16, 40};

    // 从arr数组中,拷贝arr.length个元素到newArr数组中
    Integer[] newArr = Arrays.copyOf(arr, arr.length);
    System.out.println(Arrays.toString(newArr)); // [-9, 1, 5, 16, 40]

    // 从arr数组中,拷贝arr.length-1个元素到newArr数组中
    Integer[] newArr1 = Arrays.copyOf(arr, arr.length - 1);
    System.out.println(Arrays.toString(newArr1)); // [-9, 1, 5, 16]

    // 如果拷贝的长度超过原数组,那么多余的位置会给出[默认值]
    // int类型给0,Integer类型给null
    Integer[] newArr2 = Arrays.copyOf(arr, arr.length + 1);
    System.out.println(Arrays.toString(newArr2)); // [-9, 1, 5, 16, 40, null]

    // 如果拷贝的长度<0,会抛出NegativeArraySizeException
    // 该方法的底层使用的是 System.arraycopy()
    Integer[] newArr3 = Arrays.copyOf(arr, -2);
    System.out.println(newArr3);
}

6.Arrays.fill()——数组的填充

public static void main(String[] args) {
      Integer[] arr = {-9, 1, 5, 16, 40};
      Arrays.fill(arr, 100);
      System.out.println(Arrays.toString(arr));
      // [100, 100, 100, 100, 100]
  }

7.Arrays.equals(arr1,arr2)——比较2个数组元素内容是否完全一致

public static void main(String[] args) {
    Integer[] arr = {-9, 1, 5, 16, 40};
    Integer[] arr2 = {-9, 1, 5, 16, 40};
    System.out.println(Arrays.equals(arr, arr2));
}

8.Arrays.asList()——将一组值,转换成list

1.asList方法,会将 (1,5,4,43,54)数据转成一个List集合

2.返回的asList编译类型List(接口)

3.asList运行类型java.util.Arrays#ArrayList,是 Arrays 类的静态内部类

private static class ArrayList<E> extends AbstractList<E>
        implements RandomAccess, java.io.Serializable
public static void main(String[] args) {
    List<Integer> asList = Arrays.asList(1, 5, 4, 43, 54);
    System.out.println("asList=" + asList);
    // asList=[1, 5, 4, 43, 54]
	
    System.out.println("asList的运行类型:" + asList.getClass());
    // asList的运行类型:class java.util.Arrays$ArrayList
}

9.Arrays类练习题

        自定义Book类,里面包含name和price,按price排序(从大到小)。要求使用两种方式排序,有一个 Book[] books=4本书对象。使用前面的传递 实现Comparator接口匿名内部类,也称为定制排序。可以按照 price:(1)从大到小 (2)从小到大 (3) 按照书名长度从大到小

public class ArrayExercise {
    public static void main(String[] args) {
        Book[] books = new Book[4];
        books[0] = new Book("红楼梦", 100);
        books[1] = new Book("三国演义", 90);
        books[2] = new Book("青年文摘20年", 5);
        books[3] = new Book("java从入门到放弃~", 300);

        // price从小到大
        /*Arrays.sort(books, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Book book1 = (Book) o1;
                Book book2 = (Book) o2;
                double priceVal = book2.getPrice() - book1.getPrice();
                if (priceVal > 0) {
                    return -10; // 这里只要输入<0的数即可
                } else if (priceVal < 0) {
                    return 10; // 这里只要输入>0的数即可
                } else {
                    return 0;
                }
            }
        });

        System.out.println(Arrays.toString(books));
        // [Book{name='青年文摘20年', price=5.0}, Book{name='三国演义', price=90.0}, Book{name='红楼梦', price=100.0}, Book{name='java从入门到放弃~', price=300.0}]
*/
        // price从大到小
        /*Arrays.sort(books, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Book book1 = (Book) o1;
                Book book2 = (Book) o2;
                double priceVal = book2.getPrice() - book1.getPrice();
                if (priceVal > 0) {
                    return 1;
                } else if (priceVal < 0) {
                    return -1;
                } else {
                    return 0;
                }
            }
        });

        System.out.println(Arrays.toString(books));
        // [Book{name='java从入门到放弃~', price=300.0}, Book{name='红楼梦', price=100.0}, Book{name='三国演义', price=90.0}, Book{name='青年文摘20年', price=5.0}]
*/

        // 按照书名长度从大到小
        Arrays.sort(books, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                Book book1 = (Book) o1;
                Book book2 = (Book) o2;
                return book2.getName().length() - book1.getName().length();
                // 按照书名长度从小到大
                // return book1.getName().length() - book2.getName().length();
            }
        });
        System.out.println(Arrays.toString(books));
        // [Book{name='java从入门到放弃~', price=300.0}, Book{name='青年文摘20年', price=5.0}, Book{name='三国演义', price=90.0}, Book{name='红楼梦', price=100.0}]
    }
}

class Book {
    private String name;
    private double price;

    public Book(String name, double price) {
        this.name = name;
        this.price = price;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", price=" + price +
                '}';
    }
}

二、System类

1.System.exit()

//exit 退出当前程序
System.out.println("ok1");

//1. exit(0) 表示程序退出
//2. 0 表示一个状态 , 正常的状态
System.exit(0);
System.out.println("ok2"); // ok2因为程序退出,不打印

2.System.arrCopy()——数组拷贝

public static void main(String[] args) {
    int[] src = {1, 2, 3};
    int[] dest = new int[3];// dest 当前是 {0,0,0}
    /**
     * srcPos:从源数组的哪个索引位置开始拷贝
     * dest:目标数组,即把源数组的数据拷贝到哪个数组
     * destPos:把源数组的数据拷贝到目标数组的哪个索引
     * length:从源数组拷贝多少个数据到目标数组
     */
    System.arraycopy(src, 0, dest, 0, src.length);
    // int[] src = {1,2,3};
    System.out.println("dest=" + Arrays.toString(dest));//[1,2,3]
}

3.System.currentTimeMillis()——返回当前时间距离1970-1-1的毫秒数

System.out.println(System.currentTimeMillis()); // 1727321941047

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

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

相关文章

java中的ArrayList和LinkedList的底层剖析

引入: 数据结构的分类&#xff0c;数据结构可以分成&#xff1a;线性表&#xff0c;树形结构&#xff0c;图形结构。 线性结构(线性表)包括:数组、链表、栈队列 树形结构:二叉树、AVL树、红黑树、B树、堆、Trie、哈夫曼树、并查集 图形结构:邻接矩阵、邻接表 线性表是具有存…

通信工程学习:什么是TDD时分双工

TDD:时分双工 TDD(时分双工,Time Division Duplexing)是一种在移动通信系统中广泛使用的全双工通信技术。以下是TDD的详细解释: 一、定义与原理 TDD是一种通过时间划分来实现双向通信的技术。在TDD模式中,接收和传送在同一频率信道(即载波)的不同时隙…

新品上市!智能无线接入型路由器ZX7981EP,WIFI6技术双频频段

在这个快节奏的时代 每一次点击都渴望即刻响应&#xff0c;每一份数据都期待安全传输 我们希望大家都能享有顶尖的网络体验&#xff0c;由此 启明智显ZX7891EP智能无线接入型路由器新品上市&#xff01; 2.4G/5G双频段&#xff0c;WAN口/LAN口皆齐全 最新802.1ax WiFi6技术…

【Linux】Linux工具——CMake入门

目录 1.什么是CMake 2.CMakeflie的安装和版本的查看 3.几个简单示例 3.1.编译一个.cc文件 3.2.编译一个.hpp文件和一个.cc文件 3.3.编译一个.hpp文件和两个.cc文件 3.4.编译两个.hpp文件和一个.cc文件 4.CMakeLists.txt 4.1.CMakeLists.txt常用的几条指令 4.2.变量和…

软件测试之单元测试/系统测试/集成测试详解

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 一、单元测试的概念 单元测试是对软件基本组成单元进行的测试&#xff0c;如函数或一个类的方法。当然这里的基本单元不仅仅指的是一个函数或者方法&#xff0…

基于densenet模型在RML201610a数据集上的调制识别【代码+数据集+python环境+GUI系统】

基于densenet模型在RML201610a数据集上的调制识别【代码数据集python环境GUI系统】 Loss曲线 背景意义 随着社会的快速发展&#xff0c;人们在通信方面的需求逐渐增加&#xff0c;特别是在无线通信领域。通信环境的复杂化催生了多种通信形式和相关应用&#xff0c;这使得调制…

最新版无忧二级域名分发源码,支持包月续费

目前版本支持&#xff0c;开通会员&#xff0c;会员组可以解析哪些域名 比如 用普通域名引流&#xff0c;免费使用&#xff0c;就可以注册就是普通用户组 会员组可以设置价格比如10块钱买永久会员&#xff0c;没有别的特权&#xff0c;只是会员才可以租备案域名&#xff0c; 设…

有源蜂鸣器(5V STM32)

目录 一、介绍 二、模块原理 1.有/无源蜂鸣器介绍 2.原理图 3.引脚描述 三、程序设计 main.c文件 beep.h文件 beep.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 蜂鸣器是一种能将音频信号转化声音信号的发音器件&#xff0c;在家电器上&#xff0c;在银行…

直播 SDK

直播 SDK 是音视频终端 SDK&#xff08;腾讯云视立方&#xff09;针对移动直播场景专属打造的一体化产品&#xff0c;支持直播推拉流、主播观众互动连麦、主播跨房 PK 等能力&#xff0c;为用户提供高质量直播服务&#xff0c;快速满足手机直播的需求。更多关于直播 SDK 的文档…

Ubuntu 22.04无法连接网络(网络图标丢失)解决方案

对于Ubuntu 22.04而言&#xff1a; sudo service NetworkManager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service NetworkManager start

嵌入式项目:STM32平衡车详解 (基础知识篇) (基于STM32F103C8T6)

前言&#xff1a; 本文是基于B站草履虫编写的平衡车相关内容&#xff0c;包括模块和基础知识&#xff0c;结合代码进行讲解&#xff0c;将知识进行汇总 &#xff08;由于本篇内容较长&#xff0c;请结合目录使用) 注&#xff1a;基于开源精神&#xff0c;本文仅供学习参考 目…

基于Node.js+Express+MySQL+VUE实现的计算机毕业设计旅游推荐网站

猜你喜欢评论 登录注册搜索 推荐定制景点/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序 功能图如下所示&#xff1a; 一、设计目标 本次计算机毕业设计项目的主要目标是设计和开发一款功能完善、用户友好的旅游推荐网站。该网站旨在为广大旅游爱好者提供一个便捷、…

蓝桥杯--STM32G431RBT6(TIM定时器的输出频率和占空比,含详细原理介绍和使用方法)

目录 一、前言 二、代码 实现功能&#xff1a;​编辑 按如图配置 定义变量 编写执行代码 显示在LCD上 加入按键效果 三、效果展示 四、代码开源 一、前言 ARR 即自动重装载值&#xff08;Auto Reload Register&#xff09;。相当于一个水杯&#xff0c;水杯容量&am…

sqlserver迁移数据库文件存储位置

业务背景&#xff1a;由于C盘爆满&#xff0c;需要将数据库文件迁移到别处比如D盘 下面以某一个数据库转移为示例&#xff1a;&#xff08;可以用SSMS工具&#xff0c;新建查询配合使用&#xff09; 1.查询数据库文件存储路径 sql语句&#xff1a; -- 查询路径 USE QiangTes…

[Redis][哨兵][上]详细讲解

目录 0.前言1.基本概念1.相关名词解释2.主从复制的问题3.人工恢复主节点故障4.哨兵自动恢复主节点故障 0.前言 说明&#xff1a;该章节相关操作不需要记忆&#xff0c;理解流程和原理即可&#xff0c;用的时候能自主查到即可Redis的主从复制模式下&#xff0c;⼀旦主节点由于故…

使用豆包MarsCode 实现高可用扫描工具

以下是「 豆包MarsCode 体验官」优秀文章&#xff0c;作者郝同学测开笔记。 前言&#xfeff; 最近接触K8s&#xff0c;了解到K8s提供了非常方便的实现高可用的能力&#xff0c;再加上掘金推出「豆包MarsCode初体验」征文活动&#xff0c;所以打算使用豆包 MarsCode IDE来实现…

UniApp基于xe-upload实现文件上传组件

xe-upload地址&#xff1a;文件选择、文件上传组件&#xff08;图片&#xff0c;视频&#xff0c;文件等&#xff09; - DCloud 插件市场 致敬开发者&#xff01;&#xff01;&#xff01; 感觉好用的话&#xff0c;给xe-upload的作者一个好评 背景&#xff1a;开发中经常会有…

Dubbo快速入门(一):分布式与微服务、Dubbo基本概念

文章目录 一、分布式与微服务概念1.大型互联网架构目标2.集群和分布式&#xff08;1&#xff09;集群 (Cluster)&#xff08;2&#xff09;分布式计算 (Distributed Computing)&#xff08;3&#xff09;集群与分布式的关系&#xff08;4&#xff09;实践中的应用案例 3.架构演…

【AI大模型】向量及向量知识库

一、词向量与向量 什么是词向量 在机器学习和自然语言处理&#xff08;NLP&#xff09;中&#xff0c;词向量&#xff08;word embedding&#xff09;是一种以单词为单位将每个单词转化为实数向量的技术。这些实数向量可以被计算机更好地理解和处理。 词向量背后的主要想法是…

.NET 6 中,使用 ActionFilterAttribute 实现 AOP(面向切面编程)

AOP概述&#xff1a;AOP&#xff08;面向切面编程&#xff09;是一种编程规范的风格&#xff0c;通过横切的思想&#xff0c;将系统功能和业务功能分离开&#xff0c;以提高代码的可维护性和清晰度。 系统功能模块&#xff1a; 1、缓存模块&#xff1a; 作用&#xff1a;提高…