【问题标题】:sorting class array java排序类数组java
【发布时间】:2013-06-27 06:39:06
【问题描述】:

我做了一个类如下:

class strVal{
    double val;
    String str;
}

现在我创建了一个此类的数组,现在我想按strVal.val 对该数组进行排序。我想知道Java中有没有标准定义的方法?

【问题讨论】:

标签: java sorting


【解决方案1】:

实现java.lang.Comparable接口,使用java.util.Arrays.sort(...)对StrVal的数组进行排序:

public class StrVal implements Comparable<StrVal> {

  private double val;
  private String str;

  public StrVal(double val, String str) {
    this.val = val;
    this.str = str;
  }

  @Override
  public int compareTo(StrVal o) {
    return (int)(this.val - o.val);
  }

  public double getVal() {
    return val;
  }

  public String getStr() {
    return str;
  }
}

对数组进行排序:

StrVal[] array;

...

Arrays.sort(array)

【讨论】:

    【解决方案2】:

    您需要实现ComparatorComparable 接口,然后在您的类strVal 的对象集合上调用Collections.sort。按照本教程了解有关集合排序的更多信息:

    http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/

    【讨论】:

    • 我想从 compareTo() 函数返回双精度值,但不接受双精度。我这样做如下class strVal implements Comparable{ double val;字符串 str; @Override public double compareTo(strVal another) { double first = another.val; //升序先返回 - this.val; } }
    • @navalp3 如果你正在实现 compareTo 方法,那么你需要遵循 Comparable 接口中定义的签名,否则 Collections.sort 将不起作用。 CompareTo() 将此对象与指定对象进行比较以进行排序。返回负整数、零或正整数,因为此对象小于、等于或大于指定对象。
    【解决方案3】:

    Collections.sort 可能会对您有所帮助。使用List&lt;strVal&gt; 然后:

    Collections.sort(list, comparator);
    

    更多代码:

    List<strVal> list = ...;
    Collections.sort(list, new Comparator<strVal>()
                            {
                                @Override
                                public int compare(strVal o1, strVal o2)
                                {
                                    return o1.val - o2.val;
                                }
                            });
    

    或者如果您不想使用列表,请使用Arrays.sort(array, comparator)

    【讨论】:

      【解决方案4】:

      您必须为此实现可比较接口,并将您的 val 字段设置为进行比较的字段。

      更多信息在这里:http://www.javapractices.com/topic/TopicAction.do?Id=10

      【讨论】:

        【解决方案5】:

        你需要实现Comparable-interface并使用集合的排序方法

        【讨论】:

          【解决方案6】:

          您应该使用Arrays utility class 中定义的sort 方法。

          为了根据您的键进行排序,您应该让您的类实现Comparable 或提供Comparator

          【讨论】:

            【解决方案7】:

            现在我为这个类创建了一个数组,现在我想按 strVal.val 对该数组进行排序。

            您可以实现Comparator,覆盖其compare() 方法并使用Arrays.sort()

            如果您使用List&lt;strVal&gt;,请使用Collections.sort()

            如果您认为类对象的比较只能通过其val 属性来完成,并且该属性定义了对象的自然顺序,那么您的类可以实现Comparable

            比较器:

            new Comparator<strVal>()
            {
                 @Override
                 public int compare(strVal o1, strVal o2)
                 {
                      return o1.val - o2.val;
                 }
            });
            

            可比:

            class strVal implements Comparable<strVal>{
                double val;
                String str;
            
                @Override
                public int compareTo(strVal o) {
                     return this.val - o.val;
                }   
            }
            

            附注:请遵守 Java 命名约定。

            【讨论】:

              猜你喜欢
              • 2011-07-20
              • 2023-04-02
              • 2012-04-28
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-03-04
              • 2012-12-20
              相关资源
              最近更新 更多