我有很多字符串,例如(“a32ghS:SAD”),我需要对它们进行排序。可以得到这样的整数值:
String s = "a32ghS:SAD";
int l = 0;
for (int i = 0; i < s.length(); i++) {
l += (int) s.charAt(i);
}
是否可以根据整数l对字符串进行排序?或者我应该根据它的字符串对它们进行排序?
答案 0 :(得分:0)
很大程度上取决于你想做什么。 :)
但是,如果您根据字符串对其进行排序,则会执行O(NlogN)string2int转换。 相反,如果在排序之前转换字符串,则只会转换为O(N)次转换。
答案 1 :(得分:0)
简单地将每个字符的字符值相加将对其进行错误排序(假设您需要按字母顺序排列)。考虑字符串"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字符代码并按这种方式排序,如果字符相同则考虑下一个字符,依此类推。
除非您按特定方式排序,否则您将无法击败此类表现,或者您可以利用有关您所知道的字符串的一些知识。
答案 2 :(得分:0)
这会使"a32ghS:SAD"
和"S32gha:SAD"
具有相同的整数表示。另外,你会遇到将整数转换回字符串的麻烦(你必须使用一些地图结构)。
所以,答案只是对字符串进行排序,并不是说操作真的很慢(当然这取决于项目的数量)。
答案 3 :(得分:0)
不,因为字符串中的位置很重要(请参阅上面的答案),但如果您知道字符串的最大长度,并且在添加字符后对它进行逐位移位,则可能没问题。
请记住,String.compareTo使用每个字符的unicode值的方式大致相同,但默认情况下compareTo方法区分大小写。