字母排序问题
问题产生
网络请求参数需要按照a-z排序,客户端用Arrays.sort实现,而服务器用TreeMap实现,最后结果不一致。
排序函数源码
/**
* list按a-z排序
*
* @param 请求参数的list
* @return 排序后的结果
*/
public static String getSortStr(List<String> 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<String> list) {
String result = "";
TreeMap<String, String> tree = new TreeMap<String, String>();
for (int i = 0; i < list.size(); i++) {
tree.put(list.get(i), "" + i);
}
for (Map.Entry<String, String> 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。