数组的操作(一)

来源:互联网 发布:佐川一政 知乎 编辑:程序博客网 时间:2024/06/15 23:53

1. Arrays工具类的使用

Arrays工具类是java提供的操作数组的工具类。此工具类中常用的有数组转换成字符串、数组的扩容、数组的截取、数组元素的排序、数组转换成List等。
参考Arrays API地址:http://tool.oschina.net/apidocs/apidoc?api=jdk-zh

1.1 Arrays.copyOf()

此方法可以用来扩容数组,但是实际上并不是修改了原来数组的长度,而是产生一个副本数组,此数组的长度是新设的长度,而将原来的数组的元素复制到此数组中,其余的位置补相应的0或null等;

static <T>  T[] copyOf(T[] original, int newLength) 

代码示例:

    public static void main(String[] args) {        String[] arr = {"js","java","nodejs","phyth","go"};        String[] strings2 = Arrays.copyOf(arr, 10); // 扩容        System.out.println(Arrays.toString(arr));  // [js, java, nodejs, phyth, go]         System.out.println(Arrays.toString(strings2)); // [js, java, nodejs, phyth, go, null, null, null, null, null]    }

1.2 Arrays.asList()

此方法可以将一个数组转换成List集合。

public static <T> List<T> asList(T... a)

代码示例:

String[] arr = {"js","java","nodejs","phyth","go"};List<String> strings = Arrays.asList(arr);  System.out.println(Arrays.toString(arr));// 此处arr是数组[js, java, nodejs, phyth, go] if (strings instanceof  List) {     System.out.println(strings);//[js, java, nodejs, phyth, go] }

对于”基本类型的数组”使用此方法时,会将整个数组当做一个List的元素,示例代码如下:

int[] i = {1,2,3,4,5};List<int[]> ints = Arrays.asList(i); if (ints instanceof List) {     System.out.println(ints); // [[I@74a14482] 此为List中包含一个数组     for (int[] v : ints) {         System.out.println(Arrays.toString(v)); //[1, 2, 3, 4]     } }

上面这个转换完成后的List中值包含了一个元素即就是i。

1.3 Arrays.copyOfRange()

public static T[] copyOfRange(T[] original,int from,int to)

将指定数组的指定范围复制到一个新数组。该范围的初始索引 ( from) 必须位于 0 和 original.length(包括)之间。 original[from] 处的值放入副本的初始元素中(除非 from == original.length 或 from == to)。原数组中后续元素的值放入副本的后续元素。该范围的最后索引 ( to) (必须大于等于 from)可以大于 original.length,在这种情况下, false 被放入索引大于等于 original.length - from 的副本的所有元素中。返回数组的长度为 to - from。
代码示例:

String[] arr = new String[]{"java","c#","javascript"};String[] strings = Arrays.copyOfRange(arr, 1, 2);System.out.println(Arrays.toString(strings)); // [c#]String[] arr3 = Arrays.copyOfRange(arr,0,4);System.out.println(Arrays.toString(arr3)); // [java, c#, javascript, null]

注意:截取数组片段时含头不含尾,当结束下标大于要截取的数组的长度时默认补null或者0等

2. System.arraycopy()的使用

java.lang.System.arraycopy()方法复制指定的源数组的数组,在指定的位置开始,到目标数组的指定位置。阵列组件的一个子序列被复制从由src引用的源数组到目标数组引用bydest。复制的组件的数量是相等的length 参数.
组成部分源数组中的位置srcPos到srcPos + length-1复制到的位置的destPos到destPos + length - 1,目标数组。

public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)

示例代码:

int[] arr = {1,2,3,4};int[] arr1 = {5,6,7,8,10};int[] ints = Arrays.copyOfRange(arr, 0, arr.length + arr1.length);System.arraycopy(arr1,0,ints,arr.length,arr1.length);System.out.println(Arrays.toString(ints)); // [1, 2, 3, 4, 5, 6, 7, 8, 10]

从源码中可以看见此方法是native修饰的,也就是此方法是使用非Java语言实现的。

3. ArrayUtils工具类

此工具类由org.apache提供:引入包:org.apache.commons.lang.ArrayUtils
这里不再贴上源码,这里有一篇对ArrayUtils的总结(感谢作者):http://www.chongchonggou.com/g_66696904.html
从源码看,此工具中许多方法使用的实现使用的其实是非Java语言。
在使用的过程中慢慢体会这个工具包的好处吧。

原创粉丝点击