1

私はプログラミングの割り当てに取り組んでおり、compareToメソッドを理解するのに役立つ可能性があります。

割り当ての問題の1つは、着信要素をリストに追加することです。リストがソートされている場合、新しいノードを正しい位置に配置することになっています。リストは、昇順または降順で並べ替えることができます。ヘッドノードと(node.getNext())の後のノードを比較することで、どちらの順序かを確認できると思いましたが、よくわかりません。よくわからないコード行は次のとおりです。

if(head.getContent().compareTo(tp.getContent())==1)

headは最初のノードであり、すでに追加されているジェネリックデータ型Tです。tpはスペースを節約するためだけにhead.getNext()であり、ジェネリックデータ型Tでもあります。これは、もう一度入力することになると確信しているためです。教授から、compareToメソッドを呼び出して別のジェネリックデータ型を比較す​​るだけだと言われたため、プログラムにcompareToメソッドを記述しませんでした。また、次の違いについてもわかりません。

extends Comparable<T>

implements Comparable<T>

しかし、割り当てでは、最初のものを使用する必要があります。

ヘッドノード要素が1で、次の要素が3の場合、ifステートメントの出力はどうなりますか?正しいか間違っているか?

4

7 に答える 7

11

基本的に、 compareToの考え方は、常にその反対側にゼロを置き、演算子が2つの引数の間にあることを想像することです。

A.compareTo(B) == 0; // A == B
A.compareTo(B) > 0; // A > B
A.compareTo(B) >= 0; // A >= B

//etc etc etc

これにより、読みやすくなり>-1、2年間で実際に何を意味するのかを理解する手間が省けます。

于 2012-07-23T19:24:43.343 に答える
1

質問の2番目の部分に答えるのComparable<T>は、単一のメソッドを定義するインターフェースですcompareTo()

  • extends Comparable<T>Comparableにメソッドを追加するサブインターフェイスを作成するために使用します。

  • インターフェイスを実装implements Comparable<T>する具象クラスに使用します。

教授があなたに使用してほしいと思っているなら、extends Comparableおそらく彼はあなたにあなたのノードのためのインターフェースを作成して欲しいと思っています。

public interface Node<T> extends Comparable<Node<?>> {

    T getContent();
}
于 2012-07-23T19:29:52.573 に答える
0

compareToメソッドを定義する比較可能なインターフェースのドキュメントを参照する必要があります。次に、リストの並べ替え順序に関して戻り値が何を意味するかがわかります。

Comparableはインターフェースです。インターフェイスは別のインターフェイスを拡張できます。クラスはインターフェースを実装できます。

于 2012-07-23T19:25:42.370 に答える
0

1.java.lang.Comparable インターフェースを使用します。

public interface Comparable<T>{
    public int compareTo(){
    }
}

2.クラスはComparableを実装する必要があります。そうすると、各要素が相互に呼び出し て並べ替えます。compareTo()

3.複数の方法で並べ替える場合は、 ..次にjava.util.Comparator、を使用します。これはcompare()メソッドを使用します。

于 2012-07-23T19:32:48.683 に答える
0

Comparableインターフェースは、タイプTの2つのオブジェクトAとBを比較する方法が必要であり、Affeが指摘しているように、A> Bの場合は1、AとBが等しい場合は0を返す必要があることを示しています。 A <Bの場合は1。Javaのように==を意味するわけではないことに注意してください==は、「これら2つのオブジェクトは本質的に同じである」ではなく、「これら2つのオブジェクト参照は同じものを参照する」ことを意味します。

ただし、それらを比較する方法は定義されていません。どのクラスが実装する場合でも、そうする必要があります。タイプTのフィールドの値に基づいて、AはBより大きいと言うことができます。または、より複雑なことを行うことができます。たとえば、整数値が小さいほど優先度が高いことを示しているため(1 <2ですが、優先度1の問題は優先度2の問題よりも高くなります)、比較の根拠は必ずしも明確ではありませんが、あなたの場合は内容が整数である一連のノードがある場合、整数値と同じように2つのノードを比較すると言うのが理にかなっています。たとえば、Aに格納されている整数値がBに格納されている整数値より大きい場合、A> Bであるため、A.compareTo(B)は1を返します。

実装ではなくextendsを使用する方向については、ジェネリック型(Tなど)を使用している場合は、implementsではなくextendsを使用します。クラスを定義する場合、implementsは、インターフェイスのメソッドヘッダーを使用することを意味し、インターフェイスを定義する場合、extendsは、クラスのスーパークラスのように、インターフェイスをスーパーインターフェイスとして使用することを意味します。したがって、クラスAがComparableを実装していると言う場合、AはComparableを実装しているクラスと比較するためのメソッドを持っている必要があるということです。

于 2012-07-23T19:33:22.930 に答える
0
public class UseComparetoMethod{

    static String arr[] = {"Ram", "Bharat", "Laxman", "Satrughna"};

    public static void main(String ar[]) {

        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[j].compareTo(arr[i]) < 0) {
                    String t = arr[i];
                    arr[i] = arr[j];
                    arr[j] = t;
                }
            }
            System.out.println(arr[i]);
        }
    }
}

ここに完全な説明

于 2013-10-19T03:47:52.113 に答える
0

パッケージの例;

importjava.util。*;

/ ** * * @author pradeep * / public class ComparableDemo {

public static void main(String args[]) {
    User u = new User();
    u.setName("pradeep");
    User u1 = new User();
    u1.setName("Ajeet");
    User u2 = new User();
    u2.setName("sameer");
    List<User> list = new ArrayList<User>();
    list.add(u);
    list.add(u1);
    list.add(u2);
    Collections.sort(list);
    for (User user : list) {
        System.out.println(user.getName());
    }
}

}

クラスUserはComparable{を実装します

private String name;

/**
 * @return the name
 */
public String getName() {
    return name;
}

/**
 * @param name the name to set
 */
public void setName(String name) {
    this.name = name;
}

@Override
public int compareTo(User n) {
    if (this.getName().compareTo(n.getName()) > 0) {
        return 1;
    }
    if (this.getName().compareTo(n.getName()) < 0) {
        return -1;
    }
    return 0;
}

}ここでJavaについてもっと学ぶことができます!!

于 2014-03-16T03:23:48.453 に答える