一天一个小技巧

编程入门 行业动态 更新时间:2024-10-07 20:28:23

一天一个<a href=https://www.elefans.com/category/jswz/34/1769317.html style=小技巧"/>

一天一个小技巧

前言:

        开发中经常会有业务场景需要用for循环,甚至是双重循环来做数据的统一遍历处理。但是平时我们使用的时候关注过性能吗?下面让我们一起来看看它的表现如何。

举例:

        这里分别用了两组数据,一组是狗狗群,一组是猫咪群;假设有一个场景需要找出相同颜色的狗狗和猫咪来做一些业务操作,这时就需要对两组数据进行遍历。

    public static void main(String[] args) {List<Dog> dogList = new ArrayList<>();List<Cat> catList = new ArrayList<>();for(int i = 0;i<10000;i++){if(i/3 == 0){dogList.add(new Dog("狗狗"+i,"黑白色"+i));catList.add(new Cat("咪咪"+i,"橘黄色"+i));}else if(i/5 == 0){dogList.add(new Dog("狗狗"+i,"黑色"+i));catList.add(new Cat("咪咪"+i,"黑白色"+i));}else{dogList.add(new Dog("狗狗"+i,"橘黄色"+i));catList.add(new Cat("咪咪"+i,"白色"+i));}}}

        第一种方式:双重for循环写法,这种方法也是平常最常见的一种方式,这里我分别测试了下数据量达到1w和10w时的耗时,分别为265和61454;数据量少的时候还行,但是10万级别的数据就可以明显的感觉到等待时间太久了,数据量一上去性能就下来了😳

    public static void manage1(List<Dog> dogList, List<Cat> catList){for(Dog dog : dogList){for(Cat cat : catList){if(dog.getColour().equals(cat.getColour())){//具体业务逻辑break;}}}}
    public static void main(String[] args) {List<Dog> dogList = new ArrayList<>();List<Cat> catList = new ArrayList<>();for(int i = 0;i<10000;i++){if(i/3 == 0){dogList.add(new Dog("狗狗"+i,"黑白色"+i));catList.add(new Cat("咪咪"+i,"橘黄色"+i));}else if(i/5 == 0){dogList.add(new Dog("狗狗"+i,"黑色"+i));catList.add(new Cat("咪咪"+i,"黑白色"+i));}else{dogList.add(new Dog("狗狗"+i,"橘黄色"+i));catList.add(new Cat("咪咪"+i,"白色"+i));}}long startTime = System.currentTimeMillis();manage1(dogList,catList);System.out.println("耗时:"+(System.currentTimeMillis()-startTime));}

        第二种方式:使用map,这里我把装有猫咪的list给转成了map,然后一层for循环搞定,当数据量同样为1w和10w时耗时分别为39和57,直接从自行车变火箭了,提升还是蛮大的。

    public static void manage2(List<Dog> dogList, List<Cat> catList){Map<String,Cat> catMap =  catList.stream().collect(Collectors.toMap(Cat::getColour, Function.identity()));for(Dog dog : dogList){if(catMap.containsKey(dog.getColour())){//具体业务逻辑break;}}}

总结:这里推荐大家如果数据量小于 5000,推荐就用双层 for 循环,如果大于 5000,则使用循环+map 的方式。

好啦,我是皑皑山上雪,本期就到这里,我们下期再见!😏

更多推荐

一天一个小技巧

本文发布于:2024-02-11 21:15:05,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1683537.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:小技巧

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!