前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java程序员的日常—— Arrays工具类的使用

Java程序员的日常—— Arrays工具类的使用

作者头像
用户1154259
发布2018-01-17 14:52:45
6810
发布2018-01-17 14:52:45
举报

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

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

代码语言:javascript
复制
public class ArraysTest {
    String[] array = new String[]{"a","c","2","1","b"};
    Integer[] ints = new Integer[]{5,1,4,3,2};
    ...
}
asList

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

代码语言:javascript
复制
    @Test
    public void test1(){
        List<String> lists = Arrays.asList(array);
    }
sort排序和parallelSort并行排序

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

代码语言:javascript
复制
    @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

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

代码语言:javascript
复制
    @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进行补位。第二种用法,支持拷贝目标起始位置到结束为止的数组。

代码语言:javascript
复制
    @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深度打印

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

代码语言:javascript
复制
    @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比较

对比两个数组是否相等

代码语言:javascript
复制
    @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

基于目标元素填充数组

代码语言:javascript
复制
    @Test
    public void fill(){
        Arrays.fill(array,"test");
        System.out.println(Arrays.deepToString(array));//[test, test, test, test, test]
    }
toString

打印数组元素

代码语言:javascript
复制
    @Test
    public void string(){
        System.out.println(Arrays.toString(array));//[a, c, 2, 1, b]
    }
toStream

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

代码语言:javascript
复制
    @Test
    public void toStream(){
        Arrays.stream(array).forEach(s-> System.out.println(s));
    }
parallelPrefix

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

代码语言:javascript
复制
    @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会挨个元素遍历执行方法

代码语言:javascript
复制
    @Test
    public void parallelSetAll(){
        Arrays.parallelSetAll(ints,x->x*x);
        System.out.println(Arrays.toString(ints));//[0, 1, 4, 9, 16]
    }
setAll

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

代码语言:javascript
复制
    @Test
    public void setAll(){
        Arrays.setAll(ints,x->x*2);
        System.out.println(Arrays.toString(ints));
    }
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-12-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • asList
  • sort排序和parallelSort并行排序
  • binarySearch
  • copyOf
  • deepEquals深度比较、deepHashCode生成hashcode、deepToString深度打印
  • equals比较
  • fill
  • toString
  • toStream
  • parallelPrefix
  • parallelSetAll
  • setAll
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档