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     }

 

posted @ 2018-05-24 21:39  飞舞的指尖  阅读(251)  评论(0编辑  收藏  举报