zoukankan      html  css  js  c++  java
  • Arrays工具类的使用

      1  2 这个类在日常的开发中,还是非常常用的。今天就总结一下Arrays工具类的常用方法。最常用的就是asList,sort,toStream,equals,copyOf了。另外可以深入学习下Arrays的排序算法,这个还是非常有用的。
      3 
      4 所有的方法都是在下面的类中进行测试的:
      5 
      6 public class ArraysTest {
      7     String[] array = new String[]{"a","c","2","1","b"};
      8     Integer[] ints = new Integer[]{5,1,4,3,2};
      9     ...
     10 }
     11 asList
     12 
     13 这个方法可以把数组转换成List,List提供了很多的操作方法,更便于使用。
     14 
     15     @Test
     16     public void test1(){
     17         List<String> lists = Arrays.asList(array);
     18     }
     19 sort排序和parallelSort并行排序
     20 
     21 sort比较常用了,根据元素按照自然排序规则排序,也可以设置排序元素的起始位置。
     22 
     23     @Test
     24     public void sort(){
     25        /* Arrays.sort(array);
     26         for(String str : array){
     27             System.out.println(str);
     28         }*/
     29         Arrays.sort(array,2,5);
     30         System.out.println(Arrays.deepToString(array));//[a, c, 1, 2, b]
     31     }
     32 parallelSort则采用并行的排序算法排序.但是我自己测试,可能数据量太小,速度上并没有明显的变化。
     33 
     34 binarySearch
     35 
     36 查找目标元素所在的位置,注意需要先进行排序。
     37 
     38     @Test
     39     public void binarySearch(){
     40         //binarySearch需要保证是排好序的
     41         System.out.println(Arrays.binarySearch(array,"c"));//-6
     42         Arrays.sort(array);
     43         System.out.println(Arrays.binarySearch(array,"c"));//4
     44     }
     45 copyOf
     46 
     47 拷贝数组,第一种用法,如果目标长度不够,会使用0进行补位。第二种用法,支持拷贝目标起始位置到结束为止的数组。
     48 
     49     @Test
     50     public void copyOf(){
     51         //如果位数不够,需要补位
     52         Integer[] result = Arrays.copyOf(ints,10);
     53         for(int i : result){
     54             System.out.println(i);
     55         }
     56         System.out.println("----------------------------------------->");
     57         //如果位数够,就取最小的数组
     58         result = Arrays.copyOf(ints,3);
     59         for(int i : result){
     60             System.out.println(i);
     61         }
     62         System.out.println("----------------------------------------->");
     63         //
     64         result = Arrays.copyOfRange(ints,2,4);
     65         for(int i : result){
     66             System.out.println(i);
     67         }
     68     }
     69 deepEquals深度比较、deepHashCode生成hashcode、deepToString深度打印
     70 
     71 这几个方法基本都是采用递归的写法使用。
     72 
     73     @Test
     74     public void deepTest(){
     75         String[] array2 = new String[]{"a","c","2","1","b"};
     76         System.out.println(Arrays.deepEquals(array,array2));//深度比较两个数组是否相同
     77 
     78         System.out.println(Arrays.deepHashCode(array));
     79         System.out.println(Arrays.deepHashCode(array2));//如果两个数组deepEquals,那么他们的hashcode一定相同
     80 
     81         //格式化输出数组
     82         System.out.println(Arrays.deepToString(array));
     83     }
     84 equals比较
     85 
     86 对比两个数组是否相等
     87 
     88     @Test
     89     public void equals(){
     90         String[] array2 = new String[]{"a","c","2","1","b"};
     91 
     92         //1 对比引用是否相同
     93         //2 对比是否存在null
     94         //3 对比长度是否相同
     95         //4 挨个元素对比
     96         System.out.println(Arrays.equals(array,array2));
     97     }
     98 fill
     99 
    100 基于目标元素填充数组
    101 
    102     @Test
    103     public void fill(){
    104         Arrays.fill(array,"test");
    105         System.out.println(Arrays.deepToString(array));//[test, test, test, test, test]
    106     }
    107 toString
    108 
    109 打印数组元素
    110 
    111     @Test
    112     public void string(){
    113         System.out.println(Arrays.toString(array));//[a, c, 2, 1, b]
    114     }
    115 toStream
    116 
    117 把数组转换成stream,然后可以使用java8的stream特性了。
    118 
    119     @Test
    120     public void toStream(){
    121         Arrays.stream(array).forEach(s-> System.out.println(s));
    122     }
    123 parallelPrefix
    124 
    125 这个有点像spark的reduceByKey,即根据传入的方法一次计算:
    126 
    127     @Test
    128     public void parallelPrefix(){
    129         Arrays.parallelPrefix(ints,(x,y)->(x+y));
    130         System.out.println(Arrays.deepToString(ints));//[5, 6, 10, 13, 15]
    131     }
    132 parallelSetAll
    133 
    134 这个方法相当于stream.map会挨个元素遍历执行方法
    135 
    136     @Test
    137     public void parallelSetAll(){
    138         Arrays.parallelSetAll(ints,x->x*x);
    139         System.out.println(Arrays.toString(ints));//[0, 1, 4, 9, 16]
    140     }
    141 setAll
    142 
    143 这个方法与上面类似,只不过不是并行的
    144 
    145     @Test
    146     public void setAll(){
    147         Arrays.setAll(ints,x->x*2);
    148         System.out.println(Arrays.toString(ints));
    149     }
    天下无难事,只要肯攀登!见多识广是多么重要!
  • 相关阅读:
    django-rest-framework之基于类的视图
    django-rest-framework之请求与响应
    django-rest-framework之序列化
    Linux上安装二进制文件MySQL详解
    django-rest-framework快速入门
    初识RESTful
    layer弹出层详解
    Jquery.validate.js表单验证
    实习总结
    常见的攻击手段及其防御方式
  • 原文地址:https://www.cnblogs.com/Allen-Wei/p/9085245.html
Copyright © 2011-2022 走看看