根据属性名称的指定顺序快速对对象进行排序

时间:2014-02-28 20:29:14

标签: java sorting data-structures

我有一个包含此类型对象的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); 
 }

我的问题是,有更快或更有效的方法吗?

4 个答案:

答案 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方法中处理空值。这样你可以确定比较如何迎合空值。