为什么 # 出现在最后,即使它的 ASCII 值小于 @ ?
我的洁净室实施:
final List<String> list = Arrays.asList("@a", "#a");
Collections.sort(list);
System.out.println(list);
输出:
[#a,@a]
此代码不会重现您的问题。
供参考:
'#' 是 0x23
'@' 是 0x40
一切看起来都很正常。
编辑:您的评论后的新代码“代码使用整理器,但它Collator collator = Collator.getInstance();
不特定于任何语言环境。” :
final List<String> list = Arrays.asList("@a", "#a");
final Collator c = Collator.getInstance();
Collections.sort(list, c);
System.out.println(list);
输出:
[@a,#a]
这会重现您的问题。
如果我使用Collator.getInstance()
对 ASCII 表进行排序,这是我得到的输出:
-, _, ,, ;, :, !, ?, /, ., `, ^, ', ", (, ), [, ], {, }, @, $, *, \, &, #, %, +, <, =, >, |, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, A, b, B, c, C, d, D, e, E,f,F,g,G,h,H,i,I,j,J,k,K,l,L,m,M,n,N,o,O,p,P,q,Q, r, R, s, S, t, T, u, U, v, V, w, W, x, X, y, Y, z, Z
您可以看到这与 ASCII 整理顺序完全不同:
", #, $, %, &, ', (, ), *, +, ,, -, ., /, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, :, ;, <, =, >, ?, @, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T、U、V、W、X、Y、Z、[、\、]、^、_、`、a、b、c、d、e、f、g、h、i、j、k、l、 m、n、o、p、q、r、s、t、u、v、w、x、y、z、{、|、}
对于 OP 的兴趣,这是用于创建此输出的代码:
final List<String> list = new ArrayList<String>();
final Collator col = Collator.getInstance();
for (char c = '!'; c < '~'; c++)
{
list.add(c+"");
}
Collections.sort(list, col);
System.out.println(list);