我有一系列需要按规则排序的对象。但是我需要能够切换规则,但是我有一组有限的排序规则。哪种数据结构是最好的选择?
作为一个例子,我有这个类:
class Test {
public final int amount;
public final int cost;
public final String name;
public final int whatever;
// ...
// TODO: add a constructor to set the fields :-)
}
我如何存储这些字段以按金额、成本、名称或其他方式对其进行排序。但只是其中一条规则。
我可以想象使用 ArrayList 或 HashSet ,在其中我使用自定义 Comparator 调用排序函数。但我无法想象这就是效率。我认为这在移动设备上很重要。有什么更好的方法来实现这一目标?
Best Answer-推荐答案 strong>
您不能使用 Set 用于排序,因为它没有任何顺序。怎么每一个概念都有List 和定制Comparator<T> 是合理的。
您应该采用该解决方案,此时不要关心性能。如果您对获得的结果不满意,请尝试提出更好的解决方案。
最好的解决方案是以正确的顺序从存储中读取数据。我不知道你的应用程序商店的结构如何。因此,我无法帮助您。但是实现类似的解决方案,您会发现情况还不错。
在移动设备上重要的是内存使用情况。如果您的应用程序将使用大量排序操作,您可以将比较器创建为枚举,这样它们只会被加载一次,此外还可以简化代码
private enum TestComparator implements Comparator<Test> {
BY_NAME {
@Override
public int compare(Test o1, Test o2) {
//We validate first against null
return o1n.name.compareTo(o2.name);
}
}
BY_WHATEVER{
@Override
public int compare(Test o1, Test o2) {
//We validate first against null
return (o1.whatever<o2.whatever ? -1 : (o1.whatever==o2.whatever ? 0 : 1));
}
}
}
关于java - 使用四个规则之一对列表进行排序的最佳实践,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/13488405/
|