HashMap與IF判斷內存占用對比,事實證明,Map對象在以下情況確實比IF判斷占用內存低。
HashMap占用內存:13000
package com.taiping.bky; import java.util.HashMap; import java.util.Map; public class test { public static void main(String[] args) throws Exception { long start = 0; long end = 0; // 先垃圾回收 System.gc(); start = Runtime.getRuntime().freeMemory(); int seatCount = 2; // 需要進行判斷的變量 String projectCode;// 判斷之后賦值的變量 String type = "A"; Map<Integer, String> map = new HashMap<Integer, String>(); if (type.equals("A")) { map.put(2, "0001"); map.put(4, "0002"); map.put(5, "0003"); map.put(6, "0004"); map.put(7, "0005"); } else { map.put(2, "0006"); map.put(4, "0007"); map.put(5, "0008"); map.put(6, "0009"); map.put(7, "0010"); } projectCode = map.get(seatCount);// 采用map的get方式取值 // 快要計算的時,再清理一次 System.gc(); end = Runtime.getRuntime().freeMemory(); System.out.println("一個HashMap對象占內存:" + (end - start)); } }
IF判斷占用內存:18376
package com.taiping.bky; import java.util.HashMap; import java.util.Map; public class test { public static void main(String[] args) throws Exception { long start = 0; long end = 0; // 先垃圾回收 System.gc(); start = Runtime.getRuntime().freeMemory(); int seatCount = 2; // 需要進行判斷的變量 String projectCode;// 判斷之后賦值的變量 String type = "A"; /** 優化之前,邏輯判斷太多,效率低下 */ if (type.equals("A")) { if (seatCount == 2) { projectCode = "0001"; } else if (seatCount == 4) { projectCode = "0002"; } else if (seatCount == 5) { projectCode = "0003"; } else if (seatCount == 6) { projectCode = "0004"; } else if (seatCount == 7) { projectCode = "0005"; } } else { if (seatCount == 2) { projectCode = "0006"; } else if (seatCount == 4) { projectCode = "0007"; } else if (seatCount == 5) { projectCode = "0008"; } else if (seatCount == 6) { projectCode = "0008"; } else if (seatCount == 7) { projectCode = "0010"; } } // 快要計算的時,再清理一次 System.gc(); end = Runtime.getRuntime().freeMemory(); System.out.println("一個IF判斷占內存:" + (end - start)); } }
