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在数组中的索引为3System.out.println(index2);// 9  元素值为10在数组中的索引为9System.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@4eec7777System.out.println(arr2);// [I@3b07d329System.out.println(arr3);// [I@41629346System.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 不包括索引3int [] 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 不包括索引3String [] 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 不包括索引1Student [] 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>(){@Overridepublic 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.mzph.cn/news/827303.shtml

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

相关文章

蓝桥杯第17169题——兽之泪II

问题描述 在蓝桥王国&#xff0c;流传着一个古老的传说&#xff1a;在怪兽谷&#xff0c;有一笔由神圣骑士留下的宝藏。 小蓝是一位年轻而勇敢的冒险家&#xff0c;他决定去寻找宝藏。根据远古卷轴的提示&#xff0c;如果要找到宝藏&#xff0c;那么需要集齐 n 滴兽之泪&#…

Git | 分支管理

Git | 分支管理 文章目录 Git | 分支管理1、理解分支2、创建分支&&切换分支3、合并分支4、删除分支5、合并冲突6、分支管理策略合并分支模式实际工作中分支策略bug分支删除临时分支 1、理解分支 分支就类似分身。 在版本回退中&#xff0c;每次提交Git都会将修改以git…

简单学量化——pandas的应用26——sort_values函数5

简单学量化——pandas的应用26——sort_values函数5 sort_values是pandas中的排序函数&#xff0c;语法如下&#xff1a; DataFrame.sort_values(by,axis0,ascendingTrue,inplaceFalse,kindquicksort,na_positionlast, ignore_indexFalse,keyNone) 前面我们学习了by、axis、a…

C++之写时复制(CopyOnWrite)

设计模式专栏&#xff1a;http://t.csdnimg.cn/4j9Cq 目录 1.简介 2.实现原理 3.QString的实现分析 3.1.内部结构 3.2.写入时复制 4.示例分析 5.使用场景 6.总结 1.简介 CopyOnWrite (COW) 是一种编程思想&#xff0c;用于优化内存使用和提高性能。COW 的基本思想是&am…

go的编译以及运行时环境

开篇 很多语言都有自己的运行时环境&#xff0c;go自然也不例外&#xff0c;那么今天我们就来讲讲go语言的运行时环境&#xff01; 不同语言的运行时环境对比 我们都知道Java的运行时环境是jvm &#xff0c;javascript的运行时环境是浏览器内核 Java -->jvm javascript…

FastWiki一分钟本地离线部署本地企业级人工智能客服

介绍 FastWiki是一个开源的企业级人工智能客服系统&#xff0c;它使用了一系列先进的技术和框架来支持其功能。 技术栈 前端框架&#xff1a;React LobeUI TypeScript后端框架&#xff1a;MasaFramework 基于 .NET 8动态函数&#xff1a;基于JavaScript V8引擎实现向量搜索…

物联网配网工具多元化助力腾飞——智能连接,畅享未来

随着物联网技术的迅猛发展&#xff0c;智能插座、蓝牙网关作为其中常见的智能物联设备&#xff0c;无论是功能还是外观都有很大的改进&#xff0c;在智能化越来越普遍的情况下&#xff0c;它们的应用场景也在不断拓宽。对于智能设备而言&#xff0c;配网方式的选择对于设备的成…

Jenkins CI/CD 持续集成专题一 Jenkins的安装和配置

一 jenkins 官方教程 安装Jenkins 二 安装 2.1 安装方式一 通过安装包的package方式安装 第一步下载链接&#xff1a; Download the latest package 第二步操作方式&#xff1a;打开包并按照说明操作即可安装 2.2 安装方式二 brew安装 第一 安装最新版本jenkins brew in…

【Java框架】SpringMVC(二)——SpringMVC数据交互

目录 前后端数据交互RequestMapping注解基于RequestMapping注解设置接口的请求方式RequestMapping注解的常用属性一个方法配置多个接口method属性params属性headers属性consumes属性produces属性 SpringMVC中的参数传递默认单个简单参数默认多个简单参数默认参数中有基本数据类…

山与路远程控制 一个基于electron和golang实现的远控软件

山与路远程控制 &#x1f3a5;项目演示地址 还在制作… ♻️项目基本介绍 山与路远程控制是基于electron(vue3)和golang实现的远程控制软件(项目界面主要模仿向日葵远程软件,如有侵权请告知),代码可能有点臃肿毕竟只花了一周左右写的无聊项目,如果对其感兴趣的大佬可以fork自…

【JavaScriptThreejs】判断路径在二维平面上投影的方向顺逆时针

原理分析 可以将路径每个连续的两点向量叉乘相加&#xff0c;根据正负性判断路径顺逆时针性 当我们计算两个向量的叉积时&#xff0c;结果是一个新的向量&#xff0c;其方向垂直于这两个向量所在的平面&#xff0c;并且其大小与这两个向量构成的平行四边形的面积成正比。这个新…

爱普生RX-8130CE内置电池控制 RTC

特点&#xff1a;(1)封装极小&#xff0c;集成度高RX-8130CE是一个带|2C接口的实时时钟模块&#xff0c;内部集成32.768KHz晶体振荡器。实时时钟功能不仅集成了年、月、日、星期、小时、分、秒的日历和时钟计数器&#xff0c;同时也有时间闹钟、间隔定时器、时间更新中断等功能…

算法练习|Leetcode49字母异位词分词 ,Leetcode128最长连续序列,Leetcode3无重复字符的最长子串,sql总结

目录 一、Leetcode49字母异位词分词题目描述解题思路方法:哈希总结 二、Leetcode128最长连续序列题目描述解题思路方法:总结 三、Leetcode3无重复字符的最长子串题目描述解题思路方法:双指针法总结sql总结 一、Leetcode49字母异位词分词 题目描述 给你一个字符串数组&#xf…

编译支持播放H265的cef控件

接着在上次编译的基础上增加h265支持编译支持视频播放的cef控件&#xff08;h264&#xff09; 测试页面&#xff0c;直接使用cef_enhancement,里边带着的那个html即可&#xff0c;h265视频去这个网站下载elecard,我修改的这个版本参考了里边的修改方式&#xff0c;不过我的这个…

大语言模型(LLM)漏洞爆发,AI模型无一幸免

本文概述了人工智能初创公司Anthropic于2024年04月03日发表的一篇针对人工智能安全的论文&#xff0c;该公司在本论文中宣布的一种新的“越狱”技术&#xff0c;名为Many-shot Jailbreaking&#xff08;多轮越狱&#xff09;。文章详细描述了目前大语言模型&#xff08;LLM&…

CMake 编译项目

一、概述 cmake 是C一个很重要的编译和项目管理工具&#xff0c;我们在git 上以及常见的项目现在多数都是用cmake 管理的&#xff0c;那么我们今天就做一个同时有Opencv和CGAL 以及PCL 的项目。 二、项目管理 重点是CMakeList.txt 1、CMakeList.txt cmake_minimum_requir…

Springboot3集成Web、RedisTemplate、Test和knife4j

本例将展示&#xff0c;如何在Springboot3中完成&#xff1a; Redis功能的Web接口实现构建Redis功能的单元测试knife4j自动化生成文档 Redis功能 Pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter…

windows SDK编程 --- 消息(3)

前置知识 一、消息的分类 1. 鼠标消息 处理与鼠标交互相关的事件&#xff0c;比如移动、点击和滚动等。例如&#xff1a; WM_MOUSEMOVE: 当鼠标在窗口客户区内移动时发送。WM_LBUTTONDOWN: 当用户按下鼠标左键时发送。WM_LBUTTONUP: 当用户释放鼠标左键时发送。WM_RBUTTOND…

区块链交易所技术开发架构解析 交易所开发团队

区块链交易所是加密货币市场中的关键基础设施之一&#xff0c;它提供了一个平台&#xff0c;让用户可以买卖各种数字资产。而搭建一个功能完善、安全可靠的交易所需要一个复杂的技术开发架构&#xff0c;以及一个协调配合的交易所开发团队。下面我们将分析交易所的技术架构以及…

Elasticsearch:崭新的打分机制 - Learning To Rank (LTR)

警告&#xff1a;“学习排名 (Learning To Rank)” 功能处于技术预览版&#xff0c;可能会在未来版本中更改或删除。 Elastic 将努力解决任何问题&#xff0c;但此功能不受官方 GA 功能的支持 SLA 的约束。 注意&#xff1a;此功能是在版本 8.12.0 中引入的&#xff0c;并且仅适…