Java-Arrays类-使用概要

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

asList

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

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

sort排序和parallelSort并行排序

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

 @Test
 public void sort(){
    String[] array = new String[]{"a","c","2","1","b"};
    Arrays.sort(array,2,5);
    System.out.println(Arrays.toString(array));//[a, c, 1, 2, b]
 }

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

binarySearch

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

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

copyOf

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

public class Test3 {
    
    public static void main(String[] args) {
        Integer[] ints = new Integer[]{5,1,4,3,2};
        //如果位数不够,需要补位
        Integer[] result = Arrays.copyOf(ints,10);
        //如果位数够,就取最小的数组
        result = Arrays.copyOf(ints,3);
        System.out.println(Arrays.toString(result)); //[5, 1, 4]
        result = Arrays.copyOfRange(ints,2,4);
        System.out.println(Arrays.toString(result)); //[4,3]
    }
}

equals

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

@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));
    }

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

fill

基于目标元素填充数组

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

toStream

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

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

parallelPrefix

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

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

setAll

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

 @Test
    public void parallelSetAll(){
     Integer[] ints = new Integer[]{5,1,4,3,2}; Arrays.setAll(ints,x
->x*x); System.out.println(Arrays.toString(ints));//[25, 1, 16, 9, 4] }

parallelSetAll和setAll方法效果一样,只不过parallelSetAll采用并行方式,在处理结果比较多的情况下效果会更好一些。

 

posted on 2017-11-06 15:47  小左流年  阅读(375)  评论(0编辑  收藏  举报

导航