java-Arrays

news2024/9/25 17:13:22

一、Arrays的概述

Arrays是操作数组的工具类

二、Arrays的常用方法

Arrays的常用方法基本上都被static静态修饰,因此在使用这些方法时,可以直接通过类名调用

1.toString

语法:Arrays.toString(数组)

用于将数组的元素转换为一个字符串,元素之间用逗号分隔,所有元素用[]包括。

注意:Arrays 类的 toString 方法来拼接或获取任何类型数组的字符串表示,包括基本数据类型数组对象数组。对于对象数组,如果对象本身重写了 toString 方法,那么这些方法的实现将被用于生成字符串表示。

该方法可以用来展示数组的元素(因为如果直接输出数组名 则输出的是数组的地址)

import java.util.Arrays;

public class test1 {
    public static void main(String[] args) {
        // 1.Arrays.toString(数组) 将数组变成字符串
        int [] arr1=new int[]{1,2,3};
        String s1=Arrays.toString(arr1);
        System.out.println(s1);// [1, 2, 3]

        char [] arr2=new char[]{'a','b','c'};
        String s2=Arrays.toString(arr2);
        System.out.println(s2);// [a, b, c]

        String [] arr3=new String[]{"aaa","bbb","ccc"};
        String s3=Arrays.toString(arr3);
        System.out.println(s3);// [aaa, bbb, ccc]
        
        // Student类重写了toString方法 它的输出是"Student{name = " + name + ", age = " + age + "}"
        Student student1=new Student("zhangsan",20);
        Student student2=new Student("lisi",17);
        Student student3=new Student("wangwu",18);
        Student [] arr4=new Student[]{student1,student2,student3};
        String s4=Arrays.toString(arr4);
        System.out.println(s4);// [Student{name = zhangsan, age = 20}, Student{name = lisi, age = 17}, Student{name = wangwu, age = 18}]

    }
}
class Student{
    private String name;
    private int age;
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

2.binarySearch

语法:Arrays.binarySearch(数组,元素);

返回查找元素的索引 前提是传入的数组必须是升序的

注意:

如果该元素存在 则返回他在数组中的索引值 

如果该元素不存在 则返回 -插入值-1

插入值是根据从小到大的顺序 该元素如果在数组中存在 它的索引值

import java.util.Arrays;

public class test2 {
    public static void main(String[] args) {
        // 1.Arrays.binarySearch(数组,元素) 返回元素在数组中的索引
        int [] arr1=new int[]{1,2,3,4,5,6,7,8,9,10};
        int index1=Arrays.binarySearch(arr1,4);
        int index2=Arrays.binarySearch(arr1,10);
        int index3=Arrays.binarySearch(arr1,-1);
        System.out.println(index1);// 3  元素值为4在数组中的索引为3
        System.out.println(index2);// 9  元素值为10在数组中的索引为9
        System.out.println(index3);// -11 元素值在数组中不存在的索引为-插入值-1
        // 元素-1如果在数组(已经按照升序排列)存在 那么它的位置应该在0索引处 这就是它的插入值 再减一 得到它的索引
    }
}

3.copyOf

语法:Arrays.copyOf(老数组,新数组的长度);

如果新数组的长度小于老数组的长度 则会部分拷贝(从左往右拷贝)

如果新数组的长度等于老数组的长度 则会完全拷贝

如果新数组的长度大于老数组的长度 不仅会完全拷贝 而且多余的部分通过该数组元素数据类型的默认值来填充

组合数据类型的默认值为null

import java.util.Arrays;

public class test2 {
    public static void main(String[] args) {
        // 1.Arrays.copyOf(数组,长度)
        int [] arr=new int[]{7,8,9,10};
        int [] arr1=Arrays.copyOf(arr,2);
        int [] arr2=Arrays.copyOf(arr,4);
        int [] arr3=Arrays.copyOf(arr,8);
        // 如果直接输出数组名 则结果是数组的地址
        // 如果想要输出数组的元素 则可以通过Arrays.toString()
        System.out.println(arr1);// [I@4eec7777
        System.out.println(arr2);// [I@3b07d329
        System.out.println(arr3);// [I@41629346
        System.out.println(Arrays.toString(arr1));// [7, 8]
        System.out.println(Arrays.toString(arr2));// [7, 8, 9, 10]
        System.out.println(Arrays.toString(arr3));// [7, 8, 9, 10, 0, 0, 0, 0]

        String [] arr_1=new String[]{"AAA","BBB","CCC"};
        String [] arr4=Arrays.copyOf(arr_1,2);
        String [] arr5=Arrays.copyOf(arr_1,3);
        String [] arr6=Arrays.copyOf(arr_1,5);

        System.out.println(Arrays.toString(arr4));// [AAA, BBB]
        System.out.println(Arrays.toString(arr5));// [AAA, BBB, CCC]
        System.out.println(Arrays.toString(arr6));// [AAA, BBB, CCC, null, null]

        Student student1=new Student("zhangsan",20);
        Student student2=new Student("lisi",17);
        Student student3=new Student("wangwu",18);
        Student [] arr7=new Student[]{student1,student2,student3};
        Student [] arr8=Arrays.copyOf(arr7,4);
        System.out.println(Arrays.toString(arr8));
        // [Student{name = zhangsan, age = 20}, Student{name = lisi, age = 17}, Student{name = wangwu, age = 18}, null]
    }
}
class Student{
    private String name;
    private int age;
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

4.copyOfRange

语法:Arrays.copyOfRange(开始索引,结束索引);

从开始索引拷贝到结束索引,包括开始索引,但是不包括结束索引

import java.util.Arrays;

public class test2 {
    public static void main(String[] args) {
        // 1.Arrays.copyOfRange(数组,长度)
        int [] arr=new int[]{7,8,9,10};
        // 从索引0拷贝到索引3 不包括索引3
        int [] arr1=Arrays.copyOfRange(arr,0,3);
        System.out.println(Arrays.toString(arr1));// [7, 8, 9]

        String [] arr_1=new String[]{"AAA","BBB","CCC","DDD"};
        // 从索引1拷贝到索引3 不包括索引3
        String [] arr2=Arrays.copyOfRange(arr_1,1,3);
        System.out.println(Arrays.toString(arr2));// [BBB, CCC]


        Student student1=new Student("zhangsan",20);
        Student student2=new Student("lisi",17);
        Student student3=new Student("wangwu",18);
        Student [] arr_1_1=new Student[]{student1,student2,student3};
        // 从索引0拷贝到索引1 不包括索引1
        Student [] arr3=Arrays.copyOfRange(arr_1_1,0,1);
        System.out.println(Arrays.toString(arr3));
        // [Student{name = zhangsan, age = 20}]
    }
}
class Student{
    private String name;
    private int age;
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

5.fill

语法:Arrays.fill(数组,新数据);

用新数据填充数组的每一个元素,注意:是直接在原数组中进行覆盖

import java.util.Arrays;

public class test2 {
    public static void main(String[] args) {
        // 1.Arrays.fill(数组,新数据)
        int [] arr=new int[]{7,8,9,10};
        Arrays.fill(arr,100);
        System.out.println(Arrays.toString(arr));// [100, 100, 100, 100]

        String [] arr1=new String[]{"AAA","BBB","CCC","DDD"};
        Arrays.fill(arr1,"ppp");
        System.out.println(Arrays.toString(arr1));// [ppp, ppp, ppp, ppp]


        Student student1=new Student("zhangsan",20);
        Student student2=new Student("lisi",17);
        Student student3=new Student("wangwu",18);
        Student [] arr2=new Student[]{student1,student2,student3};
        Arrays.fill(arr2,student3);
        System.out.println(Arrays.toString(arr2));
        // [Student{name = wangwu, age = 18}, Student{name = wangwu, age = 18}, Student{name = wangwu, age = 18}]
    }
}
class Student{
    private String name;
    private int age;
    public Student() {
    }
    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String toString() {
        return "Student{name = " + name + ", age = " + age + "}";
    }
}

6.sort

语法1:Arrays.sort(数组);

对数组进行排序 默认是升序排序 注意:是直接在原数组中进行排序

补充:字符串之间的比较是基于它们每个字符的Unicode值进行的。

import java.util.Arrays;

public class test2 {
    public static void main(String[] args) {
        // 1.Arrays.sort(数组)
        int [] arr=new int[]{100,20,89,1,-10,65};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));// [-10, 1, 20, 65, 89, 100]

        String [] arr1=new String[]{"i","like","pen","and"};
        Arrays.sort(arr1);
        System.out.println(Arrays.toString(arr1));// [and, i, like, pen]
        
    }
}

语法2:Arrays.sort(数组,排序规则);

Arrays.sort(数组, (o1,o2)->o2-o1); 

是降序排序 其中o1,o2可以换成任何变量名

总结:如果是(o1,o2)->o2-o1则是降序  如果是(o1,o2)->o1-o2则是升序 

根据排序规则对数组进行排序  只能给引用数据类型排序 如果要给基本数据类型排序 则需要将基本数据类型转化为对应的包装类

import java.util.Arrays;
import java.util.Comparator;

public class test2 {
    public static void main(String[] args) {
        // 1.Arrays.sort(数组,排序规则)
        Integer [] arr=new Integer[]{100,20,89,1,-10,65};
        /*
           这个降序是通过Comparator接口实现的 方法的参数是接口
           当我们要调用方法时 需要传入该接口的实现类
           Comparator接口的compare方法:
           该方法是用来排序的 需要传入两个参数 Integer o1 Integer o2
           规定数组的0索引为有序序列 0索引以后为无序序列
           o1表示从无序序列中遍历得到的每一个元素
           o2表示从有序序列的元素
           返回值为正 表示当前插入的元素小于有序序列的元素 放在后面
           返回值为负 表示当前插入的元素大于有序序列的元素 放在前面
        */
        // 未通过lamdba表达式简化
        Arrays.sort(arr,new Comparator<Integer>(){
            @Override
            public int compare(Integer o1,Integer o2){
                return o2-o1;
            }
        });
        System.out.println(Arrays.toString(arr));// [100, 89, 65, 20, 1, -10]
        
        // 通过lamdba表达式简化
        Arrays.sort(arr, (o1,o2)->o2-o1);
        System.out.println(Arrays.toString(arr));// [-10, 1, 20, 65, 89, 100]
    }
}

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

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

相关文章

世界读书日:探索阅读的多样性样性——漫画、图解、图形化立体图书

在当今信息爆炸的时代&#xff0c;阅读已经不再局限于传统的书籍形式。随着科技的发展和文化的多样化&#xff0c;人们可以通过多种形式来获取知识和享受阅读的乐趣。从漫画、图解到图形化立体图书&#xff0c;每一种形式都有其独特的魅力&#xff0c;适合不同类型的读者和学习…

软件公司:饥一顿饱一顿,咋办?试一试外部柔性产能。

有人开玩笑&#xff0c;软件公司最理想状态就是&#xff1a;项目来了&#xff0c;公司有足够的人力消化产能&#xff1b;项目没了&#xff0c;人员都走了&#xff0c;不会造成产能搁置。 以上是个理想状态&#xff0c;事实上单纯依靠一个公司是做不到的&#xff0c;所以一定建立…

2024普通人怎么搞钱?2024创业好项目!2024创业小白适合做什么生意!

先讲几个残酷的数据&#xff0c;滴滴用户从4500万跌到了1000万&#xff0c;打车的人少了3/4&#xff0c;携程用户旅游业从2600万跌到了600万&#xff0c;少了3/4&#xff0c;怪兽充电宝用户从300万跌到了100万&#xff0c;商场逛街少了2/3&#xff0c;星巴克的用户月活之前是40…

spi 收发流程

patch日期 收发流程的重大修改&#xff0c;来源于2012年的如下补丁 内核提交收发流程的patch spi: create a message queueing infrastructure - kernel/git/stable/linux.git - Linux kernel stable tree 源代码路径及功能 源码作用\drivers\spi\spi.cspi 通用接口&#x…

中小企业有必要建数字档案室吗?

中小企业有建立数字档案室的必要性取决于企业的具体情况和需求。以下是一些考虑因素&#xff1a; 1. 节省空间和成本&#xff1a;传统的纸质档案需要大量的物理空间和维护成本。建立数字档案室可以大大节约空间和减少纸质文档的使用&#xff0c;从而降低相关成本。 2. 提高文件…

数据持久化第四课-EF的基本使用

数据持久化第四课-EF的基本使用 一.预习笔记 1.数据实体模型概述 ORM全称是“对象-关系映射”&#xff08;Object-Relation Mapping&#xff09; ORM是将关系数据库中的数据用对象的形式表现出来&#xff0c;并通过面向对象的方式将这些对象组织起来&#xff0c;实现系统业务…

【RT-Thread应用笔记】FRDM-MCXN947上的RW007实践——WiFi延迟和带宽测试

【RT-Thread应用笔记】FRDM-MCXN947上的RW007实践——WiFi延迟和带宽测试 一、背景介绍1.1 RW007模组简介1.2 Arduino接口简介1.3 RW007软件包简介1.4 RT-Thread env工具简介 二、创建工程2.1 新建工程2.2 添加rw007软件包2.3 打开RW007配置项2.4 启用pin驱动2.5 禁用rw007的ST…

mysql基础19——日志

日志 mysql的日志种类非常多 通用查询日志 慢查询日志 错误日志 与时间有关联 二进制日志 中继日志 与主从服务器的同步有关 重做日志 回滚日志 与数据丢失有关 通用查询日志 记录了所有用户的连接开始时间和截至时间 以及给mysql服务器发送的所有指令 当数据异常时&…

【Yolov系列】Yolov5学习(一)补充1.1:自适应锚框计算

1、Yolov5的网络结构 Yolov5中使用的Coco数据集输入图片的尺寸为640*640&#xff0c;但是训练过程的输入尺寸并不唯一&#xff0c;Yolov5可以采用Mosaic增强技术把4张图片的部分组成了一张尺寸一定的输入图片。如果需要使用预训练权重&#xff0c;最好将输入图片尺寸调整到与作…

实战 | 无视杀软使用远控工具进行横向移动Tips

实战 | 无视杀软使用远控工具进行横向移动Tips。 在有杀软拦截&#xff0c;CS无法上线的情况下&#xff0c;经常用到todesk和向日葵这两个远控工具进行横向移动。不过这两个工具现在好像不怎么好用了。不过无所谓&#xff0c;用其他的就是了&#xff0c;听说最近GotoHTTP很火&…

机器人实验室LAAS-CNRS介绍

一、LAAS-CNRS介绍 1、缩写介绍 同样的&#xff0c;给出英文缩写的全称&#xff0c;以便理解。这里的LAAS&#xff08;Laboratory for Analysis and Architecture of Systems&#xff09;指法国的系统分析与架构实验室&#xff0c;CNRS&#xff08;Centre National de la Rec…

网络数据包嗅探器工具

组织的网络非常庞大&#xff0c;包含服务器、交换机、路由器和接入点等众多节点&#xff0c;由于许多资源和流量不断通过这些节点&#xff0c;因此很难确定大量流量是真实的还是安全攻击的迹象&#xff0c;了解和了解组织的网络流量至关重要&#xff0c;一个有用的资源是网络数…

vivado 自定义波形配置

自定义配置 您可使用下表中列示并简述的功能来自定义波形配置 &#xff1b; 其中功能名称链接至提供功能完整描述的相应小节。 光标 光标主要用作为样本位置的临时指示符并且会频繁移动 &#xff0c; 比如测量 2 个波形边沿之间的距离 &#xff08; 以样本数为单位 &#x…

STM32与ASRPRO通信(智能家居系列一)

本片文章主要讲一下STM32单片机和ASRPRO是如何进行串口通信的&#xff0c;具体过程代码和实验结果等会一并给大家复现在本篇文章当中。 一、 STM32端&#xff08;首先介绍stm32端需要用到的端口和代码如何进行操作&#xff09; 根据官方给出的原理图&#xff1a; 根据原理图我们…

XV6源码阅读——页表

文章目录 前言分页硬件实际转换 内核地址空间 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招。打算尝试6.S081&#xff0c;将它的Lab逐一实现&#xff0c;并记录期间心酸历程。 代码下载 官方网站&#xff1a;6.S081官方网站 分页硬件 RISC-V指令&#xff08;用户和内…

mysql基础3——创建和修改数据表

创建数据表 创建一个表&#xff08;importtype有默认值1&#xff09;并插入一条数据&#xff08;importtype字段没有指定值&#xff09; 约束 默认约束&#xff08;把设置的默认值自动赋值给字段&#xff09; create table demo.importhead(listnum int,supplied int,stock…

Colab使用教程(超级详细版)及Colab Pro/Pro+评测

原文&#xff1a;Colab使用教程&#xff08;超级详细版&#xff09;及Colab Pro/Pro评测 - 知乎 在下半年选修了机器学习的关键课程Machine learning and deep learning&#xff0c;但由于Macbook Pro显卡不支持cuda&#xff0c;因此无法使用GPU来训练网络。教授推荐使用Google…

【LAMMPS学习】八、基础知识(3.6)计算热导率

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语&#xff0c;以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

vector的底层与使用

前言&#xff1a;vector是顺序表&#xff08;本质也是数组&#xff09; 文档参考网站&#xff1a;https://legacy.cplusplus.com/reference/vector/vector/vector/ //底层代码 #include<assert.h> #include<iostream> #include<vector> #include<string&g…

跳跃游戏 II (贪心, 动态规划)

题目描述(力扣45题) : 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到…