zoukankan      html  css  js  c++  java
  • Java程序员的日常—— Arrays工具类的使用

    这个类在日常的开发中,还是非常常用的。今天就总结一下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));
        }
    
  • 相关阅读:
    python timeit模块用法
    boto3库限速
    golang-Beego-orm创建的坑
    Java07
    Java06
    Java04
    Java03
    c
    Mac 安装GCC
    命令: go build
  • 原文地址:https://www.cnblogs.com/xing901022/p/6224290.html
Copyright © 2011-2022 走看看