Arrays工具类

Arrays是Java.util.Arrays类能方便地操作数组,它提供的方法时静态的,归纳一下它的功能:

1、asList

定义:

@SafeVarargs
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }

功能:将数组(变长参数实际就是数组)转变成ArrayList,但是ArrayList长度不可变化,企图向ArrayList中添加或者删除数据都会报错:java.lang.UnsupportedOperationException

==注意:==

(1)对于基本类型的数组处理方法应该如下:

        List list=Arrays.asList(1,8,7,4,9);
System.out.println(list);

输出:[1, 8, 7, 4, 9]

但是如果这样处理:

        int[] arr={1,8,7,4,0};
List list=Arrays.asList(arr);
System.out.println(list);

就会输出:[[I@659e0bfd]
实际上这个就是arr数组,也就是通过asList处理基本类型的数组时,list的元素只有一个,这个元素就是这个数组

(2)对于引用数据类型的数组,可以这样处理:

Integer[] arr2=new Integer[]{3,2,1,9,17};
List list2=Arrays.asList(arr2);
System.out.println(list2);

输出:[3, 2, 1, 9, 17]

2、sort

对数组进行排序。适合byte,char,double,float,int,long,short等基本类型,还有Object类型(实现了Comparable接口),如果提供了比较器Comparator(comparator比较器参见:http://blog.csdn.net/u014473112/article/details/53339383
也可以适用于泛型。

3、binarySearch

用于对已排序(譬如经过Arrays.sort排序,且按照升序进行排序。如果数组没有经过排序,那么检索结果未知)的数组进行二分查找。适合byte,char,double,float,int,long,short等基本类型,还有Object类型和泛型(参考sort那段)

例子:

 String str[] = {"s2","s4","s1","s3"};
Arrays.sort(str);
System.out.println(Arrays.toString(str));
int ans = Arrays.binarySearch(str, "s2");
System.out.println(ans);

输出:

[s1, s2, s3, s4]

1

4、copyOf

数组拷贝,底层采用System.arrayCopy(native方法)实现。
例子:

 String str[] = {"s2","s4","s1","s3"};
String[] str2=Arrays.copyOf(str, str.length);
System.out.println(Arrays.toString(str2));

输出:
[s2, s4, s1, s3]

5、copyOfRange

指定范围的复制

 String str[] = {"s2","s4","s1","s3"};
String[] str2=Arrays.copyOfRange(str, 1,3);
System.out.println(Arrays.toString(str2));

输出:[s4, s1]

6、equals和deepEquals

顾名思义,就是比较两个数组是否相等,但是这两个有区别:

equals针对的是一维数组中的元素是否相等,如果一维数组元素是基本数据类型并且值一样,那么equals结果就是true,但是如果是引用类型(比如二维数组,那个数组的元素是数组)就要比较数组的引用数据类型元素是否相等。 而deepEquals则是深层的比较多维数组的最里面的元素,也就是说如果是二维数组,而二维数组对应的元素都相等,那么用deepEquals返回true.一般equals返回true那么deepEquals也返回true,所以如果是多维数组比较最好用deeEquals

例子:

        int[] a={1,2,3,5,7};
int[] a2={1,2,3,5,7};
System.out.println(Arrays.equals(a, a2)); //输出true


String str1[] = {"s2","s4","s1","s3",null};
String str2[] = Arrays.copyOf(str1, str1.length);
System.out.println(Arrays.equals(str1, str2));//输出true

Employee[] em={new Employee("Cato",400),new Employee("Plato",100),
                new Employee("Zeno",200),new Employee("Archimedes",500)};
Employee[] em2={new Employee("Cato",400),new Employee("Plato",100),
                new Employee("Zeno",200),new Employee("Archimedes",500)};
boolean t=Arrays.equals(em, em2);
System.out.println(t);//输出false

int a1[] = new int[]{1,2,3};
int a2[] = new int[]{1,3,3};
int a3[] = new int[]{4,3,2,1};
int a4[] = new int[]{1,2,3};
int a5[] = new int[]{1,3,3};
int a6[] = new int[]{4,3,2,1};
int[] a [] = new int[][]{a1,a2,a3};
int[] b [] = new int[][]{a4,a5,a6};
System.out.println(Arrays.equals(a, b));//输出false
System.out.println(Arrays.deepEquals(a, b));//输出true

7、toString和deepToString

toString:对于一个数组int a[] = new int[]{1,9,5,4,6,4,7,1};如果按照System.out.println(a);打印企图可以打印出[1,9,5,4,6,4,7,1],实际上只会打印出[I@3e2de41d这种。在打印数组的时候需要写成Arrays.toString(a)的形式。可参考sort的详解。

deepToString:当数组中又包含数组,那么就不能单存的利用Arrays.toString()了,请看例子。

int a1[] = new int[]{1,2,3};
int a2[] = new int[]{1,3,3};
int a3[] = new int[]{4,3,2,1};
int[] a [] = new int[][]{a1,a2,a3};
System.out.println(Arrays.toString(a));
System.out.println(Arrays.deepToString(a));

输出:

[[I@659e0bfd, [I@2a139a55, [I@15db9742]

[[1, 2, 3], [1, 3, 3], [4, 3, 2, 1]]

实际上这个和equals与deepEquals类似

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值