-3

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

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

我的目标是根据浮动的值从最大到最小对地图进行排序。就代码组织而言,这些数据的排序应该发生在哪里?现在,_myData 变量是未排序的数据映射。此外,在类上实现 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 类使用数据构建图之后显示一个排序的数据图。

4

2 回答 2

1

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

于 2013-05-07T16:38:54.293 回答
1

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

于 2013-05-07T16:40:29.393 回答