字母排序问题
问题产生
网络请求参数需要按照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。