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()方法是对排序好的方法采用二分查找的方式进行查找,返回目标元素在数组中的位置。在此不再赘述。

最新文章

  1. 一个Tomcat多端口多项目部署
  2. JavaScript实现HTML5烟花特效
  3. python中lambda表达式应用
  4. Fork一个仓库
  5. 什么是AIDL(转)
  6. yii2 文件上传
  7. Filter介绍
  8. 【verilog】fdisplay中如何保存有符号形式
  9. 题目1433:FatMouse (未解决)
  10. Win+R指令(2)
  11. 筛1-n中每个数的因子(nlogn)
  12. Android模拟器访问本地的localhost失败及解决方案
  13. QT5删除隐藏目录+隐藏文件
  14. C#连接ACCESS的一个问题
  15. Java关于e.printStackTrace()介绍
  16. ubuntu终端常用命令及solarized配色(护眼)
  17. .Net语言 APP开发平台——Smobiler学习日志:基于Access数据库的Demo
  18. jeecg自定义按钮使用exp属性不起作用
  19. Oracle shrink table
  20. PHP 打印前一天的时间

热门文章

  1. postman之设置token
  2. 基于 Serverless Component 全栈解决方案 Ⅱ
  3. [redis读书笔记] 第二部分 单机数据库 RDB持久化
  4. Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离 附加:EF Migration 操作
  5. ubuntu 配置网卡,DNS, iptables
  6. k8s pod时区更改
  7. python 安装pyinstaller
  8. 响应式Web设计:构建令人赞叹的Web应用程序的秘诀
  9. codewars--js--Roman Numerals Encode
  10. 11种常用css样式之background学习