【发布时间】:2016-12-20 00:11:53
【问题描述】:
我有大约 2000 条关于音乐列表的记录。
比如说,每个音乐对象都包含Title和Artist
public static class TitleComparator implements Comparator<MySongEntry> {
@Override
public int compare(MySongEntry e1, MySongEntry e2) {
return e1.getTitle().compareToIgnoreCase(e2.getTitle());
}
}
public static class ArtistComparator implements Comparator<MySongEntry> {
@Override
public int compare(MySongEntry e1, MySongEntry e2) {
return e1.getArtist().compareToIgnoreCase(e2.getArtist());
}
}
请忽略诸如空歌名/艺术家、特殊字符或区域设置等极端情况
分析
Collections.sort(mList, new MySongEntry.TitleComparator());
大约需要130~150ms,
但是
Collections.sort(mList, new MySongEntry.ArtistComparator());
需要 该死的 600~1500ms。
我实在想不出原因。标题和艺术家都是String 类型。长短不一。此外,实例化这些比较器都花费了不相关的时间(
有人有类似经历吗?
顺便说一句,这是在 Android 上。
【问题讨论】:
-
会不会是您的 mList 已经快按标题排序了?所以第一种工作要做的很少,但第二种有很多工作。
-
@leeyuwah 可能。这可能是唯一的原因。我会看看我是否可以随机混合它并获得更好的分析。
-
@PhilippClaßen 很确定不是那些。我确保将其隔离为逻辑。
-
我很感激有人能解释为什么我应该投反对票 :) 谢谢。