Arrays数组工具类
来源:互联网 发布:javescript高级编程 编辑:程序博客网 时间:2024/05/28 23:11
位于java.util包内的Arrays类是Java提供的一个操作数组的工具类,其内部定义了一些常见的用于操作数组的静态方法;
1:数组转List;2:排序3:查找4:元素填充;5:数组复制;6:toString;7:相等性判断;8:数组交换
1:Arrays.asList([]);
- asList 不接受基本数据类型的数组名,作为参数直接传递。
- asList 通过backed(拷贝)的方式,返回的是一个固定长度的List;
- 不能对这个返回的List执行add 方法,可以调用set方法。arrays中的ArrayList并不是平常使用的arraylist,它并没有实现list接口,而是直接继承的AbstractList;且没有复习add方法;
- 同理不能调用remove方法,但可以调用get方法获取元素。
【List转数组的实现,Collection接口定义了统一的方法toArray】
2:sort():实现数组的排序,默认按升序进行排列;
一类是基本数据类型的排序,一类是Object类型的排序;
sort静态方法的实现,按参数主要有两种实现方法,一种是数组整体进行排序;一种是在数组内指定一段起始位置进行排序,之后的对象数组排序也只是按指定起始位置排序,不再重复描述。其内部具体实现是DualPivotQuicksort(双轴快速排序);
2.1基本数据类型的排序
- 可以接收的参数类型可以是int,long,short,char,byte,float,double类型数组。
2.2Object 类型数组排序
public static <T> void sort(T[] a, Comparator<? super T> c) {
这个方法是泛型为T的数组,需要提供一个实现了Comparator接口的实例,同理也是必须明确告知排序规则,如果同时实现了Comparable接口和Comparator接口,Comparator接口的实现将覆盖Comparable接口的排序规则。
使用这个方法时,提供的“数组中的对象”必须是实现了Comparable接口的,也就是说必须告知明确告知,对数组中的对象是按什么规则排序。
[对象数组排序内部实现采用了LegacyMergeSort(归并排序)和TimSort排序。]
parallelSort
parallelSort 是Java8新增的排序方式,和sort方法不同的是,他采用多线程并行的方式进行排序,当数据规模较大时和sort相比有明显优势;具体可见arrays-sort-versus-arrays-parallelsort.
3:查找
Arrays内部的查找,主要是binarySearch(二分查找法)。可以说,关于查找到实现分类和排序完全一样。首先从数据类型上也是分为基础数据类型构成的数组和对象数组。都支持按特定范围进行排序;对于对象数组的排序,对象数组需要实现Comparable接口或者是提供Comparator接口的实例。
4:fill():元素填充
结论:java.util.Arrays.fill() 方法只适合于把数组用同一个值初始化;
5:copyOf();实现两个将原数组按指定长度复制到目标数组内返回。
其内部使用System.arraycopy方法,这是一个Java提供的native方法,因此效率会高一些。Java 内部关于数组复制的实现,都用到了这个方法。
同样,也包括一个copyOfRange的方法,这个按名字就可以理解,就是按照范围进行复制。
6:toString()
这个toString的静态方法,其实也很实用;从下面的代码的实现,可以看出,他的作用就是将我们定义的数组,按照 "[a0,a1,....]"的格式转成字符串,方便我们直接打印整个数组,打印出来的日志也会看起来更直观,更方便;
7:equals相等性
Arrays内部关于两个数组相等的判断可以首先看下下面的代码:
基础数据类型数组,以long类型为例
public static boolean equals(float[] a, float[] a2) { if (a==a2) return true; if (a==null || a2==null) return false; int length = a.length; if (a2.length != length) return false; for (int i=0; i<length; i++) if (Float.floatToIntBits(a[i])!=Float.floatToIntBits(a2[i])) return false; return true; }
Object 类型数组
public static boolean equals(Object[] a, Object[] a2) { if (a==a2) return true; if (a==null || a2==null) return false; int length = a.length; if (a2.length != length) return false; for (int i=0; i<length; i++) { Object o1 = a[i]; Object o2 = a2[i]; if (!(o1==null ? o2==null : o1.equals(o2))) return false; } return true; }
deepEquals
关于deepEquals和equals的区别,可以看看这篇文章Java中Arrays类的两个方法:deepEquals和equals;
8:swap数组交换
/** * Swaps x[a] with x[b]. */ private static void swap(Object[] x, int a, int b) { Object t = x[a]; x[a] = x[b]; x[b] = t; }
阅读全文
0 0
- 数组工具类Arrays
- Arrays数组工具类
- Arrays数组工具类
- Arrays数组工具类
- 数组排序,Arrays数组工具类专题(Arrays工具类)
- Java 数组工具类-Arrays
- Java 数组工具类 Arrays
- Java 数组工具类 Arrays
- Java数组操作工具类Arrays:
- 工具类Arrays(1)数组copy
- 操作数组的工具类Arrays
- day02--Java中数组工具类:Arrays
- Java中的数组工具类Arrays
- 操作数组的工具类Arrays
- Java数组工具类之Arrays
- Arrays(数组的工具类)
- 万能的数组工具类:Arrays
- java中数组工具类Arrays
- 你写的代码,是别人的噩梦吗?
- 大事发声:朴树 听感
- H5的语义化标签
- RecyclerView定义点击事件
- [转发和重定向]
- Arrays数组工具类
- 你所熟悉的名字和公司
- spring mvc基于token防止重复提交验证
- Hello World
- 线段树合并
- 使用Navicat连接阿里云ECS服务器上的MySQL数据库
- windows系统minikube安装以及注意事项
- MyBatis Generator自动创建代码的过程
- win10dos命令