在何处/如何实施比较器

时间:2013-05-07 16:31:51

标签: java sorting compare

我还是java的新手,我在代码组织方面遇到了很多问题。我知道一个类应该包含对该数据进行操作的数据和方法,但我仍然发现(在我看来)灰色区域应该如何组织代码。

例如,我有Object1,它包含对数据进行操作的数据和方法。 Object1包含一个方法,该方法将返回(获取)此类派生的未排序数据Map。在DifferentObject1类中,我使用Object1中的数据构建此数据的图形。 DifferentObject1需要对收到的地图中的数据进行排序。地图中的键是字符串,值是浮点数。

我的目标是根据float的值将地图从最大值排序到最小值。就代码组织而言,这些数据的排序应该在哪里发生?现在,_myData变量是一个未排序的数据Map。另外,在类上实现Comparator是对地图进行排序的最佳方法吗?

以下是一些可帮助您实现可视化的代码:

public class Object1
{
   private Map<String, float> _myData = new HashMap<String, float>();

   public Object1
   { 
       *do stuff....*
   }

   public Map<String, float> getMyData() { return _myData; }
}

public class DifferentObject1
{
    public DifferentObject1(Object1 obj1)
    {
        *do stuff with obj1*
    }
}

所以基本上我的DifferentObject1类应该在使用数据构建图形完成我的DifferentObject1类之后显示数据的排序图。

2 个答案:

答案 0 :(得分:1)

嗯,据我所知,Map不适合对值进行排序。 TreeMap按顺序按顺序插入元素,但是如果要对值进行排序,则必须首先获取值集合(values()方法),然后将其排序为集合。

答案 1 :(得分:1)

适当的设计部分是风格问题,但主要是有意义的问题。如果数据的排序是逻辑上与数据本身相关联的,那么表示数据的类实现Comparable接口是有意义的(而且,以某种方式表示数据)总是排序)。如果排序顺序的定义是上下文(在您的应用程序中听起来像),那么定义适合上下文的Comparator更有意义。