【发布时间】:2015-06-01 07:50:30
【问题描述】:
我有以下列表要排序:
A 0.53
B 0.56
C 0.56
D 0.98
E 0.33
请注意,我的列表可能包含 1000 条此类记录。我正在对列表进行排序并将排序后的列表放入数组中:
String str="";
for(String s: mylist){
str+=s+",";
}
String[] sArr = str.split(",");
String temp="";
for(int i=0; i<sArr.length;i++) {
for(int j= i+1; j<sArr.length;j++){
if(sArr[i].split("\\s")[1].compareToIgnoreCase(sArr[j].split("\\s")[1])<0){
temp= sArr[j];
sArr[j]= sArr[i];
sArr[i]=temp;
}
}
}
//sArr now contains the sorted list
问题是,当我有 1000 条记录时,排序需要很长时间。 我的问题: 有没有其他方法可以在更短的时间内有效地执行相同的任务!还是我的编码方式有问题。有人可以帮帮我吗。
【问题讨论】:
-
对于初学者,您可以使用预先构建的优化排序方法,例如
Arrays.sort... -
还使用不同的排序算法,如快速排序、合并排序。也不要在每次比较中打电话给
split("\\s")(这是一个非常昂贵的电话)。而是创建单独的类来存储您的值。 -
您还应该在遍历列表时使用
StringBuilder而不是+=,但是对于 1000 个项目不应该那么明显,但作为最佳实践会更好。字符串操作的数量也会导致排序缓慢,但正如其他人所说,改变你的排序算法,以及 -
为了进一步说明@sfat 的观点,我会强烈推荐使用 StringBuilder 进行循环使用。循环中的字符串连接(未优化)是二次时间运算,但字符串构建器可以节省工作并且是线性时间运算。如果您的 Java 编译器没有为您进行 StringBuilder 优化,您最终会得到 problem similar to this one in C#。
标签: java arrays performance sorting