Java中数组操作 java.util.Arrays 类常用方法的使用
任何一门编程语言,数组都是最重要和常用的数据结构之一,但不同的语言对数组的构造与处理是不尽相同的。
Java中提供了java.util.Arrays 类能方便地操作数组,并且它提供的所有方法都是静态的。下面介绍一下Arrays类最常用的几个方法。
1. 数组排序
Arrays工具类提供了一个sort方法,只需要一行代码即可完成排序功能。
2. 数组转换为字符串
Arrays提供了一个toString方法,可以直接把一个数组转换为字符串,这样可以方便观察数组里的元素。
//来源:公众号【时光与字节】
//数组排序与转换为字符串
package BaseCode;
import java.util.Arrays;
public class j4_1028_11 {
public static void main(String[] args) {
int[] ff= {11,3,25,71,9};
System.out.print("数组ff未排序: ");
for(int n:ff)
System.out.print(n+" ");
Arrays.sort(ff); // 对数组进行排序
System.out.printf("\n数组ff排序后: ");
for(int n:ff)
System.out.print(n+" ");
//将数组转换为字符串
System.out.printf("\n数组ff转为字符串: "+Arrays.toString(ff));
}
}
运行结果
数组ff未排序:
数组ff排序后:
数组ff转为字符串:[, , , , ]
3. 数组元素的填充与替换
Arrays提供了fill方法对数组(或数组指定位置)填充或替换为指定的值。
4. 判断数组是否相同
Arrays.equals可以比较两个数组中的元素是否一样。
//来源:【时光与字节】
//fill方法和equals方法
package BaseCode;
import java.util.Arrays;
public class j4_1028_12 {
public static void main(String[] args) {
int[] ff= new int[5];
Arrays.fill(ff, 5);
System.out.print("数组全部元素填充为5: ");
for(int n:ff)
System.out.print(n+" ");
//将数组从第1个元素至第3个元素填充为7
//含第1个元素,不含第3个元素
Arrays.fill(ff,1,3,7);
System.out.print("\n数组指定位置填充为7: ");
for(int n:ff)
System.out.print(n+" ");
int[] nn= new int[5];
Arrays.fill(nn, 5);
System.out.printf("\nff与nn相同:"+Arrays.equals(ff, nn));
}
}
运行结果
数组全部元素填充为5:
数组指定位置填充为7:
ff与nn相同:false
5. 复制数组
Arrays类的copyOf()方法和copyRange()方法可以实现对数组的复制。
copyOf(arr, int newlength)
参数newlength为新数组的长度,即从数组arr的第0个位置开始,直到newlength结束,如果newlength大于arr的长度,后面按默认值填充。
copyOfRange(arr, int formIndex, int toIndex)
参数formIndex为从数组arr中取元素的开始位置,toIndex为结束位置,但不包括该位置的元素,如toIndex超出arr的长度,后面按默认值填充。
//来源:公众号【时光与字节】
//数组的复制,copyOf与copyOfRange的使用
package BaseCode;
import java.util.Arrays;
public class j4_1028_10 {
public static void main(String[] args) {
int[] ff= {1,3,5,7,9};
//Arrays.copyOf复制数组至指定长度,从0开始
int[] newff1=Arrays.copyOf(ff, 3);
int[] newff2=Arrays.copyOf(ff, 6);
System.out.print("copyOf的使用:\n数组newff1: ");
for(int n:newff1)
System.out.print(n+" ");
System.out.printf("\n数组newff2: ");
for(int n:newff2)
System.out.print(n+" ");
//Arrays.copyOfRange第二个参数为开始位置
//第三个参数为结束位置
int[] newff3=Arrays.copyOfRange(ff, 1, 4);
int[] newff4=Arrays.copyOfRange(ff, 1, 7);
System.out.printf("\ncopyOfRange的使用:\n数组newff3: ");
for(int n:newff3)
System.out.print(n+" ");
System.out.printf("\n数组newff4: ");
for(int n:newff4)
System.out.print(n+" ");
}
}
运行结果
copyOf的使用:
数组newff1:
数组newff2:
copyOfRange的使用:
数组newff3:
数组newff4:
6. 元素查询
Arrays类的binarySearch 方法可以查询元素出现的位置,返回元素的索引。但是注意,使用binarySearch进行查找之前,必须使用sort进行排序。并且如果数组中有多个相同的元素,查找结果是不确定的。
binarySearch(arr, object key)
如果key在数组中,则返回搜索值的索引;否则返回-1或者负的插入点值。
所谓插入点值就是第一个比key大的元素在数组中的索引,而且这个索引是从1开始的。
binarySearch(arr, int fromIndex, int endIndex, object key);
fromIndex:指定范围的开始处索引(包含)
toIndex:指定范围的结束处索引(不包含)
其搜索结果可分为以下四种情况:
该搜索键不在范围内,且大于范围(数组)内元素,返回 –(toIndex + 1);
该搜索键不在范围内,且小于范围(数组)内元素,返回–(fromIndex + 1);
该搜索键在范围内,但不是数组元素,由1开始计数,返回负的插入点索引值;
该搜索键在范围内,且是数组元素,由0开始计数,返回搜索值的索引值;
可参看下面的示例代码及注释
//来源:公众号【时光与字节】
//查找数组元素:binarySearch 方法的使用
package BaseCode;
import java.util.Arrays;
public class j4_1028_13 {
public static void main(String[] args) {
int[] fn= {1,3,5,7,9};
Arrays.sort(fn);//查找前先排序
int cx1=Arrays.binarySearch(fn,5);//返回2 ,找到了关键字,索引从0开始
//未找到6,返回的是负的插入点值,
//6在数组中的插入点是元素7的索引,
//元素7的索引从1开始算就是4,所有返回-4
int cx2=Arrays.binarySearch(fn,6);//未找到,返回-4,插入点7的索引是4
int cx3=Arrays.binarySearch(fn,4);//未找到,返回-3,插入点5的索引是3
System.out.println("不指定查找范围示例:");
System.out.println("数组fn的内容:"+Arrays.toString(fn));
System.out.printf("[5]找到:cx1=%d%n", cx1);
System.out.printf("[6][4]未找到:cx2=%d, cx3=%d%n", cx2,cx3); //在数组的指定位置查找元素,参数范围(1,3)包含的数组元素为[3,5]
//该搜索键不在范围内,且大于范围(数组)内元素,返回 –(toIndex + 1)。
int cx4=Arrays.binarySearch(fn,1,3,10);
//该搜索键不在范围内,且小于范围(数组)内元素,返回–(fromIndex + 1);
int cx5=Arrays.binarySearch(fn,1,3,-3);
//该搜索键在范围内,但不是数组元素,由1开始计数,返回负的插入点索引值
int cx6=Arrays.binarySearch(fn,1,3,4);
//该搜索键在范围内,且是数组元素,由0开始计数,返回搜索值的索引值
int cx7=Arrays.binarySearch(fn,1,3,5);
System.out.println("-------------------------");
System.out.println("用参数指定查找范围示例:");
System.out.println("第一种情况:cx4= "+cx4);
System.out.println("第二种情况:cx5= "+cx5);
System.out.println("第三种情况:cx6= "+cx6);
System.out.println("第四种情况:cx7= "+cx7);
}
}
运行结果
不指定查找范围示例:
数组fn的内容:[, , , , ]
[]找到:cx1=
[][]未找到:cx2=-, cx3=-
-------------------------
用参数指定查找范围示例:
第一种情况:cx4= -
第二种情况:cx5= -
第三种情况:cx6= -
第四种情况:cx7=
Java中数组操作 java.util.Arrays 类常用方法的使用的更多相关文章
- Java中的操作日期的工具类
import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...
- 【java】java.util.Arrays类常用方法
package Arrays类; import java.util.Arrays; public class TestArrays { public static void main(String[] ...
- 慕课网-Java入门第一季-6-7 使用 Arrays 类操作 Java 中的数组
来源:http://www.imooc.com/code/1556 Arrays 类是 Java 中提供的一个工具类,在 java.util 包中.该类中包含了一些方法用来直接操作数组,比如可直接实现 ...
- [19/03/12-星期二] 数组_遍历(for-each)&复制&java.util.Arrays类
一.遍历 for-each即增强for循环,是JDK1.5新增加的功能,专门用于读取数组或集合中所有的元素,即对数组进行遍历. //数组遍历 for-each public class Test_03 ...
- Java中创建操作文件和文件夹的工具类
Java中创建操作文件和文件夹的工具类 FileUtils.java import java.io.BufferedInputStream; import java.io.BufferedOutput ...
- JDK1.8源码(四)——java.util.Arrays 类
java.util.Arrays 类是 JDK 提供的一个工具类,用来处理数组的各种方法,而且每个方法基本上都是静态方法,能直接通过类名Arrays调用. 1.asList public static ...
- java.util.Arrays类详解(源码总结)
概述 Arrays类位于java.util包下,是一个对数组操作的工具类.今天详细的看了看Arrays类的4千多行源码,现将Arrays类中的方法做一个总结(JDK版本:1.6.0_34).Array ...
- java.util.Arrays类
前言:java.util.Arrays类的技术文档请查看Oracle官网 1.Arrays类常见方法: 本文参考资料:百度文库:Oracle官网:第三方中文技术文档
- java基础-Arrays类常用方法介绍
java基础-Arrays类常用方法介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Array类的概念 此类包含用来操作数组(比如排序和搜索)的各种方法.需要注意,如果指定 ...
随机推荐
- javascript:history.go(-1)的使用
1.问题描述 在微信项目开发中,比如常用联系人的增删改查操作中,比如跳入常用联系人管理页面,选中一个联系人修改它,就会跳入修改页面,修改完成后跳转到常用联系人管理页面,此时如果修改成功跳转采用的是页面 ...
- 浏览器端获取短信验证码java实现——阿里云短信服务
需求:浏览器端输入手机号,获取验证码.点击登录,验证验证码是否输入错误.是否超时等情况,一旦校验通过,将用户数据保存到数据中(业务逻辑). 前提:注册阿里用户,开通短信服务,申请key.秘钥.签名.短 ...
- Python基础(十八)
今日主要内容 包 一.包 (一)什么是包 只要是含有__init__.py文件的文件夹就是一个包 包的本质其实就是一个文件夹,利用包将不同功能的模块组织起来,以此来提高程序的结构性和可维护性 包是用来 ...
- python爬虫——简易天气爬取
通过爬虫,抓取http://www.weather.com.cn的天气信息 功能——输入城市代码,获取当日天气,简单的beautifulsoup和requests实现.(城市代码可百度查询,不全部展示 ...
- Dockerfile 构建镜像
一.使用dockerfile构建镜像 基本结构: a.设置基础镜像 当前镜像继承于的基础镜像 FROM centos:latest b.设置维护者信息 没有固定格式 c.设置需要添加到容器中的文件 ...
- 关于SpringBoot 1.x和2.x版本差别
有点小差别 基本上基于SpringBoot的代码不需要改动,但有些配置属性和配置类,可能要改动,改动原因是 配置和类的更新或者是改名一般正常的MVC,数据库访问这些都不需要改动,下面按照本书章节说明区 ...
- Java运算符及优先级(全)
运算符是一种特殊的符号,用以表示数据的运算.赋值和比较等. Java运算符分为以下几种: • 算术运算符:+,-,*,/,%,++,-- • 赋值运算符:= • 扩展后的赋值运算符:+=,-=,*=, ...
- .NET Core ❤ gRPC
这篇内容主要来自Microsoft .NET团队程序经理Sourabh Shirhatti的博客文章:https://grpc.io/blog/grpc-on-dotnetcore/, .NET Co ...
- 最强最全的Java后端知识体系
目录 最全的Java后端知识体系 Java基础 算法和数据结构 Spring相关 数据库相关 方法论 工具清单 文档 @(最强最全的Java后端知识体系) 最全的Java后端知识体系 最全的Java后 ...
- Kotlin 中的伴生对象和静态成员
用了一段时间kotlin,越用越觉得好用,爱不释手啊,留点笔记. Kotlin 中,在类中定义的对象(object)声明,可使用 companion 修饰,这样此对象(object)就是伴生对象了.类 ...