如何加速自定义对象比较器

How to speed up custom object comparator

我正在尝试为我的播客应用程序对大量对象进行排序。这是一款 Wear OS 应用程序,因此大多数设备的内存和处理速度都比普通的现代 Android 设备低得多。以正确的顺序加载剧集在少量播客中不是很明显,但具有数百个剧集的播客最多需要 10 秒才能排序。我怎样才能加快速度?

我考虑过对剧集进行排序并以正确的顺序将它们保存在我的 sqlite 数据库中,但所有剧集都存储在它们自己的 table 中。我猜我应该将日期保存为毫秒而不是字符串。我想最初会有一种更智能的方式来存储它们,但现在它们将按照它们在所有用户数据库中找到的顺序排列。

我可以做些什么来加快这个过程?我应该只在后台执行此操作吗?

public static Comparator<Episode> DateComparator = new Comparator<Episode>() {

    public int compare(Episode episode1, Episode episode2) {
        if (episode1 == null || episode1.getDate() == null) {
            if (episode2 == null || episode2.getDate() == null) {
                return 0;
            }
            return -1;
        } else if (episode2 == null || episode2.getDate() == null) {
            return 1;
        }

        Date date1 = episode1.getDate();
        Date date2 = episode2.getDate();

        return date2.compareTo(date1);
    }

};

public Date getDate() {
    if(this.date != null) {
        try {
            return fdf.parse(this.date);
        } catch (ParseException ex) {
            ex.printStackTrace();
        }
    }
    return null;
}

private FastDateFormat fdf = FastDateFormat.getInstance("EEE MMM dd kk:mm:ss zzz yyyy");

避免重复解析 date/time 个字符串是这一系列简单改进的总主题:

  • 创建包装器 class 以保存已解析的 date-time 值,因为在排序过程中每个剧集可能会被访问​​(比较)多次。
  • 将 FastDateFormat.getInstance 设置为静态,以便仅调用一次。
  • 使用 date-time 值(长)更新数据库以供后续访问。
  • 消除每次比较对每个剧集的 getDate() 的多次调用。