Java程序员的日常—— Arrays工具类的使用

来源:互联网 发布:澳洲留学 知乎 编辑:程序博客网 时间:2024/06/05 14:21

学习Java的同学注意了!!! 

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:286945438 我们一起学Java!


这个类在日常的开发中,还是非常常用的。今天就总结一下Arrays工具类的常用方法。最常用的就是asList,sort,toStream,equals,copyOf了。另外可以深入学习下Arrays的排序算法,这个还是非常有用的。

所有的方法都是在下面的类中进行测试的:

public class ArraysTest {    String[] array = new String[]{"a","c","2","1","b"};    Integer[] ints = new Integer[]{5,1,4,3,2};    ...}

asList

这个方法可以把数组转换成List,List提供了很多的操作方法,更便于使用。

@Test    public void test1(){        List<String> lists = Arrays.asList(array);    }

sort排序和parallelSort并行排序

sort比较常用了,根据元素按照自然排序规则排序,也可以设置排序元素的起始位置。

@Test    public void sort(){       /* Arrays.sort(array);        for(String str : array){            System.out.println(str);        }*/        Arrays.sort(array,2,5);        System.out.println(Arrays.deepToString(array));//[a, c, 1, 2, b]    }

parallelSort则采用并行的排序算法排序.但是我自己测试,可能数据量太小,速度上并没有明显的变化。

binarySearch

查找目标元素所在的位置,注意需要先进行排序。

@Test    public void binarySearch(){        //binarySearch需要保证是排好序的        System.out.println(Arrays.binarySearch(array,"c"));//-6        Arrays.sort(array);        System.out.println(Arrays.binarySearch(array,"c"));//4    }

copyOf

拷贝数组,第一种用法,如果目标长度不够,会使用0进行补位。第二种用法,支持拷贝目标起始位置到结束为止的数组。

@Test    public void copyOf(){        //如果位数不够,需要补位        Integer[] result = Arrays.copyOf(ints,10);        for(int i : result){            System.out.println(i);        }        System.out.println("----------------------------------------->");        //如果位数够,就取最小的数组        result = Arrays.copyOf(ints,3);        for(int i : result){            System.out.println(i);        }        System.out.println("----------------------------------------->");        //        result = Arrays.copyOfRange(ints,2,4);        for(int i : result){            System.out.println(i);        }    }

deepEquals深度比较、deepHashCode生成hashcode、deepToString深度打印

这几个方法基本都是采用递归的写法使用。

@Test    public void deepTest(){        String[] array2 = new String[]{"a","c","2","1","b"};        System.out.println(Arrays.deepEquals(array,array2));//深度比较两个数组是否相同        System.out.println(Arrays.deepHashCode(array));        System.out.println(Arrays.deepHashCode(array2));//如果两个数组deepEquals,那么他们的hashcode一定相同        //格式化输出数组        System.out.println(Arrays.deepToString(array));    }

equals比较

对比两个数组是否相等

@Test    public void equals(){        String[] array2 = new String[]{"a","c","2","1","b"};        //1 对比引用是否相同        //2 对比是否存在null        //3 对比长度是否相同        //4 挨个元素对比        System.out.println(Arrays.equals(array,array2));    }

fill

基于目标元素填充数组

@Test    public void fill(){        Arrays.fill(array,"test");        System.out.println(Arrays.deepToString(array));//[test, test, test, test, test]    }

toString

打印数组元素

@Test    public void string(){        System.out.println(Arrays.toString(array));//[a, c, 2, 1, b]    }

toStream

把数组转换成stream,然后可以使用java8的stream特性了。

@Test    public void toStream(){        Arrays.stream(array).forEach(s-> System.out.println(s));    }

parallelPrefix

这个有点像spark的reduceByKey,即根据传入的方法一次计算:

@Test    public void parallelPrefix(){        Arrays.parallelPrefix(ints,(x,y)->(x+y));        System.out.println(Arrays.deepToString(ints));//[5, 6, 10, 13, 15]    }

parallelSetAll

这个方法相当于stream.map会挨个元素遍历执行方法

@Test    public void parallelSetAll(){        Arrays.parallelSetAll(ints,x->x*x);        System.out.println(Arrays.toString(ints));//[0, 1, 4, 9, 16]    }

setAll

这个方法与上面类似,只不过不是并行的

@Test    public void setAll(){        Arrays.setAll(ints,x->x*2);        System.out.println(Arrays.toString(ints));    }

学习Java的同学注意了!!! 

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:286945438 我们一起学Java!

1 2
原创粉丝点击