我有很多字符串,例如 ("a32ghS:SAD"),我需要对它们进行排序。是否可以得到这样的整数值:
String s = "a32ghS:SAD";
int l = 0;
for (int i = 0; i < s.length(); i++) {
l += (int) s.charAt(i);
}
可以根据整数 l 对字符串进行排序吗?还是我应该根据它的字符串对它们进行排序?
简单地将每个字符的字符值相加会对其进行错误排序(假设您想要按字母顺序排列)。考虑 string "aZZZZ"
,这将在"b"
您的代码示例之后出现。您的方法将通过字符串中包含的字符的字符代码之和对字符串进行排序,不是特别有用。
假设您想按字母顺序排序,您应该使用 Java 库方法Collections.sort来完成,因为已经编写了代码来执行此操作。
ArrayList<String> list = new ArrayList<String>();
unsortList.add("cc");
unsortList.add("bb");
unsortList.add("dd");
unsortList.add("aa");
Collections.sort(list);
典型的字母排序的工作方式是通过比较第一个位置的 ASCII 字符代码并以这种方式对它们进行排序,如果字符相同,则考虑下一个字符,依此类推。
除非您以特定的方式排序,或者您可以利用一些关于您所知道的字符串的知识,否则您将无法超越这种性能。
这将产生"a32ghS:SAD"
并"S32gha:SAD"
具有相同的整数表示。另外,您在将整数转换回字符串时会遇到麻烦(您必须使用一些映射结构)。
所以,答案只是对字符串进行排序,并不是说它的操作真的很慢(当然,这取决于项目的数量)。
很大程度上取决于你想做什么。:)
但是,如果您根据字符串对其进行排序,您将执行 O(NlogN) string2int 转换。相反,如果您在排序之前转换字符串,您将只进行 O(N) 次转换。
不,因为字符串中的位置很重要(请参阅上面的答案),但是如果您知道字符串的最大长度,并且在添加字符后对其进行按位移位,则可能没问题。
请记住,String.compareTo 以几乎相同的方式使用每个字符的 unicode 值,但 compareTo 方法默认区分大小写。