java或判斷優化小技巧

寫業務代碼的時候,我們經常要做條件判斷,有的時候條件判斷的或判斷長達20多個。reg.equals("1") || reg.equals("2") || reg.equals("3")||.....是不是很奔潰

1,這個時候代碼維護不好維護,字段一多對字段就會出錯。

2,在最差情況下,執行語句要對這20個判斷都判斷一下才知道最終的結果,在高性能業務下發揮並不好。

這個時候我們可以用map或set來進行判斷,因爲hashmap是一個hash桶,查找的效率是比較快的,不管判斷任何值他的查詢效率基本穩定。

當然最好指定hashmap的長度和判斷的元素一樣多,這樣就避免對某一個桶內衍生出鏈表了。

例子如下,大家可以試一試。

/**
 * @author:YangLiu
 * @date:2018年3月22日 上午10:06:25
 * @describe:
 */
public class ifMap {

    public static Map<String, String> ISJACARD = new HashMap<String, String>(20) {
        {
            put("1", "");
            put("2", "");
            put("3", "");
            put("4", "");
            put("5", "");
            put("6", "");
            put("7", "");
            put("8", "");
            put("9", "");
            put("11", "");
            put("12", "");
            put("13", "");
            put("14", "");
            put("15", "");
            put("16", "");
            put("17", "");
            put("18", "");
            put("19", "");
            put("21", "");
            put("22", "");
            put("23", "");
            put("24", "");
            put("25", "");
            put("26", "");
            put("27", "");
            put("28", "");
            put("29", "");
        }
    };

    public static void main(String[] args) {

        String reg = "13";
        long start = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
            if (reg.equals("1") || reg.equals("2") || reg.equals("3")
                    || reg.equals("4") || reg.equals("5") || reg.equals("6")
                    || reg.equals("7") || reg.equals("8") || reg.equals("9")
                    || reg.equals("19") || reg.equals("18") || reg.equals("17")
                    || reg.equals("16") || reg.equals("15") || reg.equals("14")
                    || reg.equals("13") || reg.equals("12") || reg.equals("11")) {
            }
        }
        System.out.println(System.currentTimeMillis() - start);

        start = System.currentTimeMillis();
        for (int i = 0; i < 100000000; i++) {
            if (ISJACARD.containsKey(reg)) {

            }
        }
        System.out.println(System.currentTimeMillis() - start);
    }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章