如何加速自定义对象比较器
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() 的多次调用。
我正在尝试为我的播客应用程序对大量对象进行排序。这是一款 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() 的多次调用。