美文网首页程序员
一次简单的代码优化

一次简单的代码优化

作者: maylor_zhu | 来源:发表于2017-01-03 09:47 被阅读74次

之前在逛百度知道的时候看到一个问题,题目如下:

图片.png

本着助人为乐的精神,我就简单的想了一下,首先用一个for循环,分别取出String数组里面的字符串,然后切割字符串,接着判断字符串的长度,然后根据字符串的长度分别处理,如果字符串长度为1,则说明该字符串是一级目录,如果该字符串长度为2,则说明该字符串是二级目录.后面的同理.然后在字符串长度判断里面判断该一级分类是否存在,如果不存在则创建,存在则不处理.

这个逻辑是我一开始想到的也是我看到这个需求的第一感觉的处理方法.接着就开始编程了.

代码:

@Getter
@Setter
public class Menu {

    private Long id;
    private List child = new ArrayList<>();
    
    public Menu(Long id) {
        this.id = id;
    }
}

    public static void main(String[] args) {
        String[] a = {"1", "1-3-2", "1-2", "1-2"};
        List<Menu> list = new ArrayList<>();        //存放一级目录
        Menu menuTemp = null;
        for (int i = 0; i < a.length; i++) {
            String[] b = a[i].split("-"); 
            //一级菜单
            if(b.length==1){
                menuTemp = new Menu(Long.valueOf(b[0]));
                //如果不存在
                Menu exist = isExist(menuTemp,list);
                if(exist==null){
                    list.add(menuTemp);
                }
                //二级菜单
            }else if(b.length == 2){
                //一级菜单是否存在
                menuTemp = new Menu(Long.valueOf(b[0]));
                Menu exist = isExist(menuTemp,list);
                //如果不存在
                if(exist == null){
                    //添加一级菜单
                    list.add(menuTemp);
                    Menu menuTemp2 = new Menu(Long.valueOf(b[1]));
                    //添加二级菜单
                    menuTemp.getChild().add(menuTemp2);
                }else{
                    menuTemp = new Menu(Long.valueOf(b[1]));
                    Menu exist2  = isExist(menuTemp,exist.getChild());
                    //如果二级菜单不存在
                    if(exist2==null){
                        exist.getChild().add(menuTemp);
                    }
                }
                //三级菜单
            }else if(b.length == 3){
                //一级菜单是否存在
                menuTemp = new Menu(Long.valueOf(b[0]));
                Menu exist = isExist(menuTemp,list);
                //一级菜单不存在
                if(exist == null){
                    list.add(menuTemp);
                    Menu menuTemp2 = new Menu(Long.valueOf(b[1]));
                    //添加二级菜单
                    menuTemp.getChild().add(menuTemp2);
                    Menu menuTemp3 = new Menu(Long.valueOf(b[2]));
                    //添加三级菜单
                    menuTemp2.getChild().add(menuTemp3);
                //一级菜单存在    
                }else{
                    menuTemp = new Menu(Long.valueOf(b[1]));
                    Menu exist2  = isExist(menuTemp,exist.getChild());
                    //如果二级菜单不存在
                    if(exist2==null){
                        exist.getChild().add(menuTemp);
                        Menu menuTemp3 = new Menu(Long.valueOf(b[2]));
                        menuTemp.getChild().add(menuTemp3);
                        
                    }else{
                        //todo
                    }
                }
            }
        }
        String jsonArray = JSONArray.toJSONString(list);
        System.out.println(jsonArray);
    }
    private static Menu isExist(Menu menu,List<Menu> list){
        for (Menu obj : list) {
            if(menu.getId().equals(obj.getId())){
                return obj;
            }
            
        }
        return null;
    }

写到后面的第三次判断的 时候我就感觉不对劲了.这判断怎么这么多?而且这还只是三层菜单,而且每添加一层,就要多加这个层数的个数的判断,这么写肯定不行.

后来就想了一下.

        List list2 = new ArrayList<>();
        
        for (int i = 0; i < a.length; i++) {
            String[] b = a[i].split("-"); 
            List tempList = list2;
            Menu tempMenu = null;
            for (int j = 0; j < b.length; j++) {
                tempMenu = new Menu(Long.valueOf(b[j]));
                Menu exist = isExist(tempMenu,tempList);
                if(exist==null){
                    tempList.add(tempMenu);
                    tempList = tempMenu.getChild();
                }else{
                    tempList = exist.getChild();
                }
            }
            
        }
        String jsonArray2 = JSONArray.toJSONString(list2);
        System.out.println(jsonArray2);

把那么长的判断变成了这么短的代码,而且功能一模一样.真是神奇.

相关文章

  • 一次简单的代码优化

    之前在逛百度知道的时候看到一个问题,题目如下: 本着助人为乐的精神,我就简单的想了一下,首先用一个for循环,分别...

  • SEO网站优化步骤!

    SEO优化主要分为八步: 1、代码优化 就是让代码看着更简洁对于以后做网站优化的时候更简单明了,若是想要修改网站的...

  • 想要很好地学习SEO,你不能忽视代码优化

    对于网站优化,代码优化非常重要。对于优秀的SEO人员,虽然您不需要精通代码,但仍需要了解一些简单的基本代码。 要成...

  • 一次代码优化

    这几天接了一个祖传代码,有段代码如下 中间赋值代码很多 去除了一部分无用代码。一开始没发现问题,因为开发和测试环境...

  • web前端开发编码规范及性能优化

    代码优化 这个部分仅仅将代码优化本身,不考虑性能,关于代码部分的性能优化在 页面渲染 部分 代码优化 中 HTML...

  • 常见三种设计模式

    1:builder工厂模式通过平时对代码的总结和优化,我们经常可以将原先复杂的代码改写成简单易懂的代码,增强代码可...

  • 编译器笔记46-代码优化-常用的代码优化方法

    优化的分类 机器无关优化: 针对中间代码 机器相关优化: 针对目标代码 局部代码优化: 单个基本块范围内的优化 全...

  • Python-02进阶-07代码优化技巧

    代码优化技巧 优化原则 核心技巧 其他技巧 Python 代码性能优化技巧 常用代码优化技巧 sort()优于so...

  • 建立AMD、CMD、nodeJS通用的模板引擎,并封装发布到np

    首先我们先来写一个简单的模板引擎代码 优化简单的模板引擎代码 上面的代码有缺陷,如果在对象中有嵌套层的话,那么是无...

  • 关于前端性能优化

    前端性能优化: 前端性能优化是个经久不息的话题,也是面试常客,今天简单总结下,让大家有初步的了解 1.代码级的优化...

网友评论

    本文标题:一次简单的代码优化

    本文链接:https://www.haomeiwen.com/subject/ahlevttx.html