【问题标题】:Where/How to Implement a Comparator [closed]在哪里/如何实现比较器[关闭]
【发布时间】:2013-05-07 16:31:50
【问题描述】:

我对 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 类应该显示一个排序的数据图。

【问题讨论】:

  • 我没有对你投反对票,我也不打算投反对票,但我怀疑这是因为如果你在谷歌中输入“comparator sort java”这个词,this is the first returned link我建议你读一下。此外,Maps 不用于排序。
  • @durron597: TreeMap 用于排序 ;)
  • 如果您不理解某个教程,请针对您不理解的教程中的内容提出具体问题。这样做并展示你的尝试可能会让你得到更好的答案和更多的尊重。
  • 我理解你的困惑,而且我不是反对你的人,但我只是将我的经验传递给你。如果我们看到有人表现出为解决他们的问题付出了很多努力的证据,我们通常会非常积极地回应他们。这意味着展示你的尝试,无论它们有多糟糕,并提供具体的证据证明你在来这里之前确实已经在教程中苦苦挣扎。我们中的大多数人都在努力学习这些东西,我们非常尊重其他证明他们已经做到这一点的人。
  • @HovercraftFullOfEels,你的 cmets 很有意义。下次我一定会这样做。

标签: java sorting compare


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 应该由哪个类进行排序?需要排序数据的类,还是获取数据的类?
    • 需要数据的那个(调用getMyData()的那个)
    猜你喜欢
    • 1970-01-01
    • 2013-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-04
    相关资源
    最近更新 更多