私は音楽リストについて約2000件のレコードを持っています。 言って、各音楽オブジェクトはコンパイラによってJava Collection.sort(mList、comparator)に時間がかかります
Collections.sort(mList, new MySongEntry.TitleComparator());
をプロファイリング空の曲のタイトル/アーティスト、特殊文字、またはロケール
ようTitle
と
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());
}
}
無視してくださいArtist
コーナーケースを約130かかり含まれています〜150ms、
しかし
Collections.sort(mList, new MySongEntry.ArtistComparator());
はいまいましい 600〜1500msをとります。
私は本当に理由を考えることができません。タイトルとアーティストの両方がString
タイプです。長さは異なります。また、これらのコンパレータをインスタンス化すると、無関係な時間がかかりました(< 0ms)
誰でも同じような経験がありますか?
Btw、これはAndroid版です。
あなたのmListはすでにほとんどのタイトルでソートされていますか?最初のソートにはほとんど手間がありませんでしたが、2番目のソートには多くのことがあります。 – leeyuiwah
@leeyuwahおそらく。それは理由だけかもしれません。私はそれをランダムに混ぜて、より良いプロファイリングを得ることができるかどうかを見ていきます。 –
@PhilippClaßen確かにそれはそれらではありません。私はこれをロジックに分離するようにしました。 –