java-Arrays

一、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]
    }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(mac)Prometheus监控之Node_exporter(CPU、内存、磁盘、网络等)

完整步骤 1.启动 Prometheus 普罗米修斯 prometheus --config.file/usr/local/etc/prometheus.yml 浏览器访问 http://localhost:9090/targets 2.启动Node_exporter node_exporter 访问&#xff1a;http://localhost:9100 3.启动grafana brew services start grafana 访问…

Redis - Redisson tryLock 函数参数分析

这里有三个参数&#xff1a; waitTime&#xff1a;等待时间leaseTime&#xff1a;超时施放时间TimeUnit&#xff1a;时间单位 等待时间 如果 ABC… 多个线程去抢夺一把锁&#xff0c;A 成功了&#xff0c;如果设置的是 -1&#xff0c;那么 BCD... 就不等待&#xff0c;直接返…

计算机工作者学习平台

给大家分享了几个非常有用的学习平台&#xff0c;可以作为参考&#xff0c;具体为&#xff1a; 1.中国大学MOOC 中国大学MOOC_优质在线课程学习平台 2.牛客 牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推&#xff0c;求职就业一站解决_牛客网 3.CSDN https://www…

气压计LPS22HB开发(1)----轮询获取气压计数据

气压计LPS22HB开发----1.轮询获取气压计数据 概述硬件准备视频教学样品申请源码下载产品特性通信模式速率生成STM32CUBEMX串口配置IIC配置CS和SA0地址设置串口重定向参考程序SA0设置模块地址获取ID复位操作BDU设置设置低通滤波器设置速率轮询读取数据演示 概述 最近在弄ST的课…

[Algorithm][二分查找][山峰数组的峰顶索引][寻找峰值][寻找旋转排序数组中的最小值][0~n-1中缺失的数字]详细讲解

目录 1.山脉数组的峰顶索引1.题目链接2.算法原理详解3.代码实现 2.寻找峰值1.题目链接2.算法原理详解3.代码实现 3.寻找旋转排序数组中的最小值1.题目链接2.算法原理详解3.代码实现 4.0〜n-1 中缺失的数字1.题目链接2.算法原理详解3.代码实现 1.山脉数组的峰顶索引 1.题目链接…

TaskWeaver使用记录

TaskWeaver使用记录 1. 基本介绍2. 总体结构与流程3. 概念细节3.1 Project3.2 Session3.3 Memory3.4 Conversation3.5 Round3.6 Post3.7 Attachment3.8 Plugin3.9 Executor 4. 代码特点5. 使用过程5.1 api调用5.2 本地模型使用5.3 添加插件 6. 存在的问题与使用体验6.1 判别模型…

模板初阶

泛型编程&#xff1a; 泛型编程&#xff1a;编写与类型无关的通用代码&#xff0c;模板是泛型编程的基础 class Test { public:void Swap(int& left, int& right){int tmp left;left right;right tmp;}void Swap(double& left, double& right){double tmp…

一句话或一张图讲清楚系列之——ISERDESE2的原理

主要参考&#xff1a; https://blog.csdn.net/weixin_50810761/article/details/137383681 xilinx原语详解及仿真——ISERDESE2 作者&#xff1a;电路_fpga https://blog.csdn.net/weixin_45372778/article/details/122036112 Xilinx ISERDESE2应用笔记及仿真实操 作者&#x…

鸿蒙OpenHarmony【小型系统编写“Hello World”程序】 (基于Hi3516开发板)

编写“Hello World”程序 下方将展示如何在单板上运行第一个应用程序&#xff0c;其中包括新建应用程序、编译、烧写、运行等步骤&#xff0c;最终输出“Hello World&#xff01;”。 前提条件 已参考[创建工程并获取源码]&#xff0c;创建Hi3516开发板的源码工程。 鸿蒙开发…

【Python-装饰器】

Python-装饰器 ■ 简介■ 装饰器的一般写法&#xff08;闭包写法&#xff09;■ 装饰器的语法 (outer写法) ■ 简介 装饰器其实是一种闭包&#xff0c; 功能就是在不破坏目标函数原有的代码和功能的前提下为目标函数增加新功能。 ■ 装饰器的一般写法&#xff08;闭包写法&am…

服务器数据恢复—StorNext文件系统下raid5阵列数据恢复案例

服务器数据恢复环境&#xff1a; 昆腾某型号存储&#xff0c;8个存放数据的存储柜1个存放元数据的存储柜。 元数据存储&#xff1a;8组RAID1阵列1组RAID10阵列4个全局热备硬盘。 数据存储&#xff1a;32组RAID5阵列&#xff0c;划分2个存储系统。 服务器故障&#xff1a; 数据…

鸿蒙开发模拟器的坑, No Devices

问题 我已经安装了模拟器&#xff0c;并且模拟器已经运行了 在Device Manager页面开启模拟器 No Devices 但是这里没有模拟器的选项 解决 添加环境变量 下面步骤 1、清除用户数据 2、 关闭Device Manager 3、 关闭ide 重启ide、开启模拟器 看到有模拟器的选项了

SLICEM是如何将查找表配置为分布式RAM/移位寄存器的

1.首先说SliceM和SliceL如何配置为ROM的 一个SLICE包含4个六输入查找表&#xff0c;因此每个查找表就能存储64bit的数据&#xff0c;要实现128bit的ROM&#xff0c;只需要通过两个LUT就可实现&#xff0c;具体如下表: 2.如何配置成为分布式RAM SLICEM中的LUT如下图&#xff…

iOS - Runloop在实际开发中的应用

文章目录 iOS - Runloop在实际开发中的应用1. 控制线程生命周期&#xff08;线程保活&#xff09;2. 解决NSTimer在滑动时停止工作的问题2.1. 案例2.2 解决 3. 监控应用卡顿4. 性能优化 iOS - Runloop在实际开发中的应用 1. 控制线程生命周期&#xff08;线程保活&#xff09;…

夜神、雷电、android studio手机模拟器资源占用情况

夜神、雷电、android studio手机模拟器内存资源占用情况 由于开发电脑只有16G内存&#xff0c;出于开发需要和本身硬件资源的限制&#xff0c;对多个手机模拟器进行了机器资源占用&#xff08;主要是内存&#xff09;的简单比较。 比较的模拟器包括&#xff1a; 1. Android S…

[Linux][多线程][二][线程互斥][互斥量][可重入VS线程安全][常见锁概念]

目录 1.线程互斥1.互斥相关背景概念2.多个线程并发的操作共享变量&#xff0c;会带来一些问题3.互斥量mutex 2.互斥量的接口1.初始化互斥量2.销毁互斥量3.加锁4.解锁5.使用 -- 改善上面代码 3.互斥量实现原理探究1.加锁是如何保证原子性的&#xff1f;2.如何保证锁是原子性的&a…

交通工程绪论

一、交通工程 交通工程学定义交通工程学研究的内容交通工程学的产生与发展交通工程学在道路运输管理中的作用 1. 交通工程学定义 早在20世纪30年代&#xff0c;美国交通工程师协会(American Institute of Traffic Engineers)给交通工程学(Traffic Engineering)下了一个定义&a…

Java中使用Graphics2D绘制字符串文本自动换行 算法

效果&#xff1a; 代码&#xff1a; /*** return void* Author xia* Description //TODO 写字换行算法* Date 18:08 2021/4/1* Param []**/private static void drawWordAndLineFeed(Graphics2D g2d, Font font, String words, int wordsX, int wordsY, int wordsWidth) {FontD…

Java微服务架构之Spring Boot —上篇

SpringBoot 概述 SpringBoot提供了一种快速使用Spring的方式&#xff0c;基于约定优于配置的思想&#xff0c;可以让开发人员不必在配置与逻辑业务之间进行思维的切换&#xff0c;全身心的投入到逻辑业务的代码编写中&#xff0c;从而大大提高了开发的效率&#xff0c;一定程度…

CentOS 7虚拟机配置过程中所需组件的安装(二)

1.安装net-tools组件&#xff08;解决无 ifconfig&#xff09; # yum install net-tools 2.安装gcc、c编译器以及内核文件 # yum -y install gcc gcc-c kernel-devel 验证安装成功 3.安装nano&#xff08;文本编辑器&#xff09; # yum install nano