1. 程式人生 > >關於Java與Map的那點事

關於Java與Map的那點事

Java將Map拼接成“引數=值&引數=值”:

  把一個map的鍵值對拼接成“引數=值&引數=值”即“username=angusbao&password=123456”這種形式方便傳遞,尤其是在介面呼叫的時候,這種方式使用的更加普遍,比如http請求的get方式,如何用java對其進行解決呢?
  程式碼如下:

  /** 
  * 把陣列所有元素排序,並按照“引數=引數值”的模式用“&”字元拼接成字串
  * @param params 需要排序並參與字元拼接的引數組
  * @return 拼接後字串
  * @throws UnsupportedEncodingException 
  */
  public static String createLinkStringByGet(Map<String, String> params) throws UnsupportedEncodingException {
    List<String> keys = new ArrayList<String>(params.keySet());
    Collections.sort(keys);
    String prestr = "";
    for (int i = 0; i < keys.size(); i++) {
      String key = keys.get(i);
      String value = params.get(key);
      value = URLEncoder.encode(value, "UTF-8");
      if (i == keys.size() - 1) {//拼接時,不包括最後一個&字元
        prestr = prestr + key + "=" + value;
      } else {
        prestr = prestr + key + "=" + value + "&";
      }
    }
    return prestr;
  }
  public static void main(String[] args) throws UnsupportedEncodingException {
    Map<String,String> map= new HashMap<String,String>();
    map.put("1", "hello");
    map.put("2", "world");
    System.out.println(createLinkStringByGet(map));
  }

 

關於專案使用MAP和實體類作為引數的優缺點:

Map:

優點:

1.靈活性強於javabean,易擴充套件,耦合度低。

2.寫起來簡單,程式碼量少。

3.mybatis 查詢的返回結果本身就是MAP,可能會比返回javabean快
一點;

 

缺點:

1.javabean在資料輸入編譯期就會對一些資料型別進行校驗,如果出錯會直接提示。而map的資料型別則需要到sql層,才會進行處理判斷。

2.map的引數名稱如果寫錯,也是需要到sql層,才能判斷出是不是欄位寫錯,不利於除錯等。相對而言javabean會在編譯期間發現錯誤

3.map的引數值如果多傳、亂傳,也是需要到sql層,才能判斷出是不是欄位寫錯,不利於除錯等。相對而言javabean會在編譯期間發現錯誤

4.僅僅看方法簽名,你不清楚Map中所擁有的引數個數、型別、每個引數代表的含義。後期人員去維護,例如需要加一個引數等,如果專案
層次較多,就需要把每一層的程式碼都瞭解清楚才能知道傳遞了哪些引數。

 

Javabean:
優點:

1.面向物件的良好詮釋

2.資料結構清晰,便於團隊開發 & 後期維護;

3.程式碼足夠健壯,可以排除掉編譯期錯誤。

 

缺點:
1.程式碼量增多,大量時間去封裝用到的表物件;
2.可能會影響開發效率。