我有一个包含此类型对象的List
class Element
{
String description;
...
}
这些对象包含在列表中。
List<Element> elements = ...
此列表将根据description
对象的Element
属性按升序排序。
Element对象只能有标准描述,需要根据指定的顺序进行排序 -
descE
descA
descK
descB
descF
...
为了快速进行此排序,我目前的计划如下 -
使用Comparator<Element>
,以便我可以使用Collections.sort(list,comparator)
功能。将标准描述存储在HashMap
HashMap<String, Integer> descriptionOrder = new HashMap<String, Integer>();
descriptionOrder.put("descE", 0);
descriptionOrder.put("descA", 100);
descriptionOrder.put("descK", 200);
descriptionOrder.put("descB", 300);
descriptionOrder.put("descF", 400);
我添加了一个100的缓冲区,以防稍后需要在两个元素之间添加更多描述。
public int compare(Element a, Element b)
{
int valueForA = descriptionOrder.get(a.getDescription());
int valueForB = descriptionOrder.get(b.getDescription());
return (valueForA - valueForB);
}
我的问题是,有更快或更有效的方法吗?
答案 0 :(得分:0)
如果您打算创建一个Separaate Comparator类来定义Element类对象之间的比较,那么您可以使用Collections.sort对您的Arraylist进行排序。
Comparator<Elements> comparator = new ElementsComparator<Elements>();
Collections.sort (elements, comparator);
这是相同的链接:enter link description here
答案 1 :(得分:0)
由于您的密钥是字符串,因此您可以使用TreeMap。这将按字母顺序按键名称排序。
答案 2 :(得分:0)
不确定您是否绝对要求描述为字符串类型。
您可以随时使用以下课程。
class Description implements Comparable<Description> {
private final String name;
private final int precedence;
// rest of the Code
}
class Element implements Comparable<Element> {
private Description desc;
// rest of the code.
}
答案 3 :(得分:0)
我认为你拥有的是好的。
但是,您可能需要考虑List可以保存空值,并且您可能希望在compare方法中处理空值。这样你可以确定比较如何迎合空值。