Java集合之Arrays 剖析
Arrays工具类位于 java.util 包下,是一个比较常用的工具类,其可以针对数组进行各种操作,比如赋值、排序、搜索等等。在项目过程中我们针对数组的有关操作,如果不方便直接操作,均可通过调用此类的某些方法转换成 list 集合进行操作。下面首先介绍 Arrays 类的几种常用方法。
1. Arrays.asList
此方法是将一个数组直接转换为集合,返回结果为 List集合。下面的代码是该方法的应用。需要注意的是,数组是Integer类型和 int 类型,生成的List 的长度是不一样的。此外,最容易踩的坑是 不能对通过数组生成的 List集合进行 add 和 remove。
/**
* 关于 Arrays.asList()
*/
Integer[] a = {1,2,3,4,5,6,7};
int[] b = {11,22,33,44,55}; System.out.println("======关于 Arrays.asList=======");
List aList = Arrays.asList(a);
System.out.println(aList.size()); //运行结果为 7
List bList = Arrays.asList(b);
System.out.println(bList.size()); //运行结果为 1
// aList.add(123); // java.lang.UnsupportedOperationException
// bList.remove(1); // java.lang.UnsupportedOperationException
为什么不能对通过数组生成的 List集合进行 add 和 remove?
看源码!!!首先 asList 方法返回的是一个 ArrayList类,这个类不是我们java集合中的 ArrayList,这个ArrayList 集合继承了 AbstractList,我们在调用 add 方法或者 remove 方法时都是调用的 AbstractList 中的 add 或者 remove 方法,这个方法本身就会抛出异常,因此针对通过数组生成的List类不能直接对其进行add或者remove。
2. Arrays.fill
该方法的主要作用是对应一个给定的数组,对其进行赋值操作,其可以支持对于该数组的全部元素进行赋值,也可以支持对于给定数组的给定起始位置进行赋值,当然其符合“左闭右开”原则,即包括起始元素但不包括结束元素,与 String的subString方法中只包括 beginIndex,不包括 endIndex一样。
/**
* 关于 Arrays.fill
* 若是 int 类型, 未赋值元素为0; 若是 Integer 类型, 未赋值元素为 null;
*/
Integer[] c = new Integer[10];
Integer[] d = new Integer[10];
Arrays.fill(c,33);
Arrays.fill(d,6,8,33);
System.out.println("============关于 Arrays.fill============");
System.out.println(Arrays.asList(c)); // [33, 33, 33, 33, 33, 33, 33, 33, 33, 33]
System.out.println(Arrays.asList(d)); // [null, null, null, null, null, null, 33, 33, null, null]
3. Arrays.equals
该方法的主要作用是比较两个数组是否相等,不用我们手动比较两个数组的每个元素是否相等。当然,如果两个数组只是某些元素的顺序不同,其返回结果也是不相等的。
/**
* 关于 Arrays.equals
*/
int[] e1 = new int[]{1,2,3};
int[] e2 = null;
int[] e3 = new int[]{};
int[] e4 = new int[]{1,2,3};
int[] e5 = new int[]{1,3,2};
System.out.println("=======关于 Arrays.equals========");
System.out.println(Arrays.equals(e1,e2)); //false
System.out.println(Arrays.equals(e1,e3)); //false
System.out.println(Arrays.equals(e1,e4)); //true
System.out.println(Arrays.equals(e2,e3)); //false
System.out.println(Arrays.equals(e1, e5)); //false
具体怎么实现的呢?看源码!!!只不过是先针对null的情况进行判断,然后根据数据的长度进行判断,最后再依次比较每个元素是否相等
4. Arrays.toString
该方法比较简单,主要是将数组打印出来,对于Integer 和 int 类型的数组均可实现,其实现源码如下,通过 StringBuilder进行拼接。
/**
* 关于 Arrays.toString()
*/
Integer[] f = {1,2,3,4,5,6,7};
int[] g = {1,2,3,4,5,6,7}; System.out.println("========关于 Arrays.toString=========");
System.out.println(Arrays.toString(f)); //运行结果为 [1, 2, 3, 4, 5, 6, 7]
System.out.println(Arrays.toString(g)); //运行结果为 [1, 2, 3, 4, 5, 6, 7]
5. Arrays.sort() 和 Arrays.binarySearch()方法
这两个也是比较常用的方法。Arrays.sort()是对给定的数组进行排序,当然可以重写其比较方法更高排序的顺序,默认是升序,具体可参见博文 https://www.cnblogs.com/Demrystv/p/11564054.html ; Arrays.binarySearch()方法是对排序好的方法采用二分查找的方式进行查找,返回目标元素在数组中的位置。在此不再赘述。
最新文章
- 一个Tomcat多端口多项目部署
- JavaScript实现HTML5烟花特效
- python中lambda表达式应用
- Fork一个仓库
- 什么是AIDL(转)
- yii2 文件上传
- Filter介绍
- 【verilog】fdisplay中如何保存有符号形式
- 题目1433:FatMouse (未解决)
- Win+R指令(2)
- 筛1-n中每个数的因子(nlogn)
- Android模拟器访问本地的localhost失败及解决方案
- QT5删除隐藏目录+隐藏文件
- C#连接ACCESS的一个问题
- Java关于e.printStackTrace()介绍
- ubuntu终端常用命令及solarized配色(护眼)
- .Net语言 APP开发平台——Smobiler学习日志:基于Access数据库的Demo
- jeecg自定义按钮使用exp属性不起作用
- Oracle shrink table
- PHP 打印前一天的时间
热门文章
- postman之设置token
- 基于 Serverless Component 全栈解决方案 Ⅱ
- [redis读书笔记] 第二部分 单机数据库 RDB持久化
- Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作
- ubuntu 配置网卡,DNS, iptables
- k8s pod时区更改
- python 安装pyinstaller
- 响应式Web设计:构建令人赞叹的Web应用程序的秘诀
- codewars--js--Roman Numerals Encode
- 11种常用css样式之background学习