按字母排序问题



字母排序问题

问题产生

网络请求参数需要按照a-z排序,客户端用Arrays.sort实现,而服务器用TreeMap实现,最后结果不一致。

排序函数源码

/** * list按a-z排序 * * @param 请求参数的list * @return 排序后的结果 */
public static String getSortStr(List list) {
    String result = "";
    String[] arrayList = list.toArray(new String[list.size()]);
    Arrays.sort(arrayList, String.CASE_INSENSITIVE_ORDER);
    for (int i = 0; i < arrayList.length; i++) {
        if (i > 0)
            result += "&";
        result += arrayList[i];
    }
    return result;
}

/** * 使用TreeMap来排序 * * @param 请求参数的list * @return 排序后的结果 */
public static String getSortStr2(List list) {
    String result = "";
    TreeMap tree = new TreeMap();
    for (int i = 0; i < list.size(); i++) {
        tree.put(list.get(i), "" + i);
    }
    for (Map.Entry entry : tree.entrySet()) {
        if (!"".equals(result))
            result += "&";
        result += entry.getKey();
    }
    return result;
}

排序结果对比结论

  • Arrays.sort(arrayList, String.CASE_INSENSITIVE_ORDER); 大小写不敏感, 严格按照a-z排序;
  • Arrays.sort(arrayList)和Tree Map排序结果相同,按字母的ASCII编码大小排序,优先级A>Z>a>z。