Java中的字符串数组排序,字典序
学习,搞清楚字符串排序规则,对接口对接中的签名,验签有很大的作用。
字符串数组排序规则
- 打印字符的 ASCII 码值函数
private static String getAsciiOfStrings(String[] strArr) { StringBuilder sb = new StringBuilder("["); for (String str : strArr) { for (char c : str.toCharArray()) { sb.append(String.format("%c(%d)", c, (int) c)); } sb.append(", "); } sb.delete(sb.length() - 2, sb.length()).append(']'); return sb.toString(); }
字符串数组不忽略大小写排序
比较方案:
- 先比较每一位字符的 ASCII 码值,小的放前面
- 如果字符串前面相同,比较长度,短的放前面
String[] strArr = {"aBC", "aBD", "ABc", "ABd"}; Arrays.sort(strArr); System.out.println(Arrays.toString(strArr)); // [ABc, ABd, aBC, aBD] System.out.println(getAsciiOfStrings(strArr)); // [A(65)B(66)c(99), A(65)B(66)d(100), a(97)B(66)C(67), a(97)B(66)D(68)]
这些字符串中存在字符a(97)
,A(65)
,B(66)
,c(99)
,C(67)
,D(68)
,然后我们按照 ASCII 码值从小到大的顺序进行排序。
- 先把拥有大写字母 A 的字符串排前面。
- 总结就是大写字母在前,小写字母在后,因为大写字母的 ASCII 值小。大写字母 > 小写字母
字符串数组忽略大小写排序
比较方案:
- 不区分大小写,即不比较大小写字母的 ASCII 值
- 仅按照字母表顺序,a > B > c > d > E
String[] strArr = {"aBC", "aBD", "ABc", "ABd"}; Arrays.sort(strArr, String::compareToIgnoreCase); System.out.println(Arrays.toString(strArr)); // [aBC, ABc, aBD, ABd] System.out.println(getAsciiOfStrings(strArr)); // [a(97)B(66)C(67), A(65)B(66)c(99), a(97)B(66)D(68), A(65)B(66)d(100)]
不分区大小写,相同字母,按照初始化的顺序,不同字母按照字母表顺序。
字符串转集合排序
利用 List 内置排序方法来排序
String[] strArr = {"aBC", "aBD", "ABc", "ABd",}; // 集合排序 List<String> stringList = Arrays.asList(strArr); // 不区分大小写排序 stringList.sort(String::compareToIgnoreCase); System.out.println(stringList); // [aBC, ABc, aBD, ABd] // 区分大小写排序 stringList.sort(String::compareTo); System.out.println(stringList); // [ABc, ABd, aBC, aBD]
利用集合工具类排序方法排序
String[] strArr = {"aBC", "aBD", "ABc", "ABd",}; // 集合排序 List<String> stringList = Arrays.asList(strArr); // 不区分大小写排序 Collections.sort(stringList, String::compareToIgnoreCase); System.out.println(stringList); // [aBC, ABc, aBD, ABd] // 区分大小写排序 Collections.sort(stringList, String::compareTo); System.out.println(stringList); // [ABc, ABd, aBC, aBD]
利用有序集合 TreeSet 来排序
有序集合排序,注意此处是按区分大小写排序,TreeSet 和 TreeMap
String[] strArr = {"aBC", "aBD", "ABc", "ABd",}; // 集合排序 List<String> stringList = Arrays.asList(strArr); // 区分大小写的排序 TreeSet<String> stringTreeSet = new TreeSet<>(stringList); System.out.println(stringTreeSet); // [ABc, ABd, aBC, aBD]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix