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

  1. publicclassArraysTest{
  2. String[]array=newString[]{"a","c","2","1","b"};
  3. Integer[] ints =newInteger[]{5,1,4,3,2};
  4. ...
  5. }

asList

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

  1. @Test
  2. publicvoidtest1(){
  3. List<String> lists = Arrays.asList(array);
  4. }

sort排序和parallelSort并行排序

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

  1. @Test
  2. publicvoidsort(){
  3. /* Arrays.sort(array);
  4. for(String str : array){
  5. System.out.println(str);
  6. }*/
  7. Arrays.sort(array,2,5);
  8. System.out.println(Arrays.deepToString(array));//[a, c, 1, 2, b]
  9. }

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

binarySearch

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

  1. @Test
  2. publicvoidbinarySearch(){
  3. //binarySearch需要保证是排好序的
  4. System.out.println(Arrays.binarySearch(array,"c"));//-6
  5. Arrays.sort(array);
  6. System.out.println(Arrays.binarySearch(array,"c"));//4
  7. }

copyOf

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

  1. @Test
  2. publicvoidcopyOf(){
  3. //如果位数不够,需要补位
  4. Integer[] result = Arrays.copyOf(ints,10);
  5. for(inti : result){
  6. System.out.println(i);
  7. }
  8. System.out.println("----------------------------------------->");
  9. //如果位数够,就取最小的数组
  10. result = Arrays.copyOf(ints,3);
  11. for(inti : result){
  12. System.out.println(i);
  13. }
  14. System.out.println("----------------------------------------->");
  15. //
  16. result = Arrays.copyOfRange(ints,2,4);
  17. for(inti : result){
  18. System.out.println(i);
  19. }
  20. }

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

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

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

equals比较

对比两个数组是否相等

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

fill

基于目标元素填充数组

  1. @Test
  2. publicvoidfill(){
  3. Arrays.fill(array,"test");
  4. System.out.println(Arrays.deepToString(array));//[test, test, test, test, test]
  5. }

toString

打印数组元素

  1. @Test
  2. publicvoidstring(){
  3. System.out.println(Arrays.toString(array));//[a, c, 2, 1, b]
  4. }

toStream

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

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

parallelPrefix

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

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

parallelSetAll

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

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

setAll

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

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