基础篇——代码优化100条之(1—10)

℡╲_俬逩灬. 提交于 2019-12-06 14:41:59

1、从Map中取key和值

  当循环中只需要Map的主键时,迭代keySet()是正确的,但是,当需要主键和取值时,迭代entrySet()才是更高效的做法,比先迭代keySet()后再去get取值性能更加。

package com.zzb.test.admin;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.Map;

/**
 * 当循环中只需要Map的主键时,
 * 迭代keySet()是正确的,但是,当需要主键和取值时,
 * 迭代entrySet()才是更高效的做法,比先迭代keySet()后再去get取值性能更加
 * Created by zzb on 2019/12/5 14:11
 */
public class TestOne {

    private static final Logger logger = LoggerFactory.getLogger(TestOne.class);
    public static void main(String[] args){
        Map<String,String> map = new HashMap<>();
        map.put("one","1");
        map.put("two","2");
        map.put("three","3");
        map.put("four","4");
        map.put("five","5");
        //反例
        for (String key:map.keySet()) {
            logger.info("key:{}",key);
            logger.info("value:{}",map.get(key));
        }
        //正例
        for (Map.Entry<String,String> entry:map.entrySet()) {
            logger.info("key:{}",entry.getKey());
            logger.info("value:{}",entry.getValue());
        }
    }
}

2、集合判空

  使用Collection.size()来检测空逻辑上是没有问题的,但是使用Collection.isEmpty()可以获得更好的性能。后者任何时候实现的时间复杂度都是0(1),而前者有时候实现的事件复杂度可能是0(n),如果需要判断是否为null,使用CollectionUtils

package com.zzb.test.admin;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;

import java.util.ArrayList;
import java.util.List;


/**
 * 使用Collection.size()来检测空逻辑上是没有问题的,
 * 但是使用Collection.isEmpty()可以获得更好的性能。后者任何时候实现的时间复杂度都是0(1),
 * 而前者有时候实现的事件复杂度可能是0(n)
 * 如果需要判断是否为null,使用CollectionUtils
 * Created by zzb on 2019/12/5 14:11
 */
public class TestOne {

    private static final Logger logger = LoggerFactory.getLogger(TestOne.class);
    public static void main(String[] args){
        List<String> list = null;

        if (CollectionUtils.isEmpty(list)) {
            logger.info("CollectionUtils空集合");
        }
        list = new ArrayList<>();
        if (list.size() == 0) {
            logger.info("空集合");
        }
        list.add("1");
        if (!list.isEmpty()) {
            logger.info("非空集合");
        }

    }

}

3、不要将集合对象传给自己

  由于某些方法要求参数在执行期间保持不变,因此将集合传递给自身可能会导致异常行为

package com.zzb.test.admin;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.ArrayList;
import java.util.List;


/**
 * 由于某些方法要求参数在执行期间保持不变,因此将集合传递给自身可能会导致异常行为
 * Created by zzb on 2019/12/5 14:11
 */
public class TestOne {

    private static final Logger logger = LoggerFactory.getLogger(TestOne.class);
    public static void main(String[] args){
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("6");
        if (list.containsAll(list)) {
            logger.info("无意义,list.containsAll(list)总是返回true");
        }
        //性能差,不如list.clear()性能高
        list.removeAll(list);
//        list.clear();
        if (list.isEmpty()) {
            logger.info("移除自己之后");
        }

    }

}

4、初始化集合大小

  集合也是有大小限制的,每次扩容的时间复杂度很有可能是0(n),所以尽量初始化集合的大小,减少扩容的次数

 

未完待续~~~~

 

 

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!