問題タブ [comparable]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
42710 参照

java - mainにnull値が含まれているComparablesのリストから最小値と最大値を取得するための最良の方法は何ですか?

私はこのようなことを考えています:

しかし、ヌルセーフではありません。これも私が望んでいることです。

この問題を解決するためのより良い方法を知っていますか?

編集:

コメントの後、私もmin()を試しました:

それについてどう思いますか?

0 投票する
2 に答える
2712 参照

java - < と > は、implements Comparable などの何を意味しますか?

Java 1.4.2では、クラスはインターフェースをjava.math.BigInteger実装します。ComparableSerializable

Java 1.5.0では、クラスはインターフェースをjava.math.BigInteger実装します。SerializableComparable<BigInteger>

<これは、とについて質問するための単なる例です>。私が本当に疑問に思っているのは、<>ものです。

私の質問は 3 つあります。

  • ステートメントの<BigInteger>部分はどういう意味ですか?implements
  • その構文は何と呼ばれていますか?
  • そしてそれは何をしますか?

<PS: グーグルで検索するのは本当に難しく、そもそも>SO を検索することは不可能<です。>

ありがとう!

0 投票する
12 に答える
35171 参照

java - java.lang.NumberがComparableを実装しないのはなぜですか?

なぜ java.lang.Number実装しないのか誰かが知っていますComparableか?これは、私には少し奇妙に思えるNumbersを並べ替えることができないことを意味します。Collections.sort

ディスカッションの更新後:

すべての有益な回答をありがとう。私はこのトピックについてさらに調査を行うことになりました。

java.lang.NumberがComparableを実装しない理由の最も簡単な説明は、可変性の懸念に根ざしています。

少しレビューすると、は、、、、、、、、、、、およびの抽象的なスーパーjava.lang.Numberタイプです。そのリストにあり、実装しないでください。AtomicIntegerAtomicLongBigDecimalBigIntegerByteDoubleFloatIntegerLongShortAtomicIntegerAtomicLongComparable

Comparable掘り下げてみると、比較中または比較後にオブジェクトが変更され、比較の結果が役に立たなくなる可能性があるため、可変型に実装するのは適切ではないことがわかりました。AtomicLongとは両方ともAtomicInteger変更可能です。API設計者は、将来のサブタイプの実装を制約するため、Number実装しないことを事前に考えていました。Comparable確かに、AtomicLongそして最初に実装されAtomicIntegerてからずっと後にJava1.5で追加されました。java.lang.Number

可変性とは別に、ここでもおそらく他の考慮事項があります。のcompareTo実装では、すべてのサブタイプに対応できるため、Numberすべての数値をにプロモートする必要があります。数学とパフォーマンスの観点からのその昇進の意味は私には少し不明確ですが、私の直感はその解決策が厄介であると感じています。BigDecimalNumber

0 投票する
5 に答える
71754 参照

java - javaのEnum finalにcompareToがあるのはなぜですか?

Java の列挙型は、Comparableインターフェイスを実装します。ComparableのメソッドをオーバーライドすればよかったのですcompareToが、ここでは final とマークされています。Enumのデフォルトの自然順序compareToは、リストされた順序です。

Java列挙型にこの制限がある理由を知っている人はいますか?

0 投票する
4 に答える
996 参照

java - 同等の改善比較パフォーマンス

コードのプロファイリングを行ったところ、 を実装するクラスがComparable<T>8 倍の CPU 時間を消費していることがわかりました。

よりも

スローダウンは、このメソッドの仮想テーブル ルックアップが原因であると想定しています。


関数の静的呼び出しを強制する方法はありますか? (非仮想 C++ メソッドと同様)

このオブジェクトで Comparable<T>使用するため、インターフェイスを引き続き使用したいので、このコードを書き直したくありません。編集:いいえ、私はcompareTo(Object) を実装しませんでした-これは自動的に生成され、プロファイラーによって報告されましたTreeSet


0 投票する
10 に答える
5775 参照

java - Java Generics and Infinity(比較可能)

整数型を使用すると、次のことができます。

ジェネリックを使用した場合はどうすればよいですか?

PriorityQueueに似たものを実装するためにこれが必要です。キューから削除したいノードにアクセスできますが、最小値ではありません。

私は最初のステップで立ち往生しています。私ができる唯一のことは、ノードのキーを現在の最小値に設定することです。十分かどうかはわかりません。

0 投票する
6 に答える
4502 参照

java - Javaでは、同等の意味から拡張するとはどうなりますか

このようなコードが表示されます

これはどういう意味ですか、それの長所と短所は何ですか?

0 投票する
3 に答える
6097 参照

java - Java:Collat​​orKeyを使用してコレクションをソートする

私が達成したいのは、オブジェクトの集合を文字列値でソートすることです。ただし、コレーターを使用してロケールに依存する方法で。パフォーマンス上の理由から、Java APIはCollat​​ionKeyの使用がはるかに高速であると述べているため、Collat​​orKeyクラスではなくCollat​​or compare()メソッド(以下のコードのように)を使用したくありません。

しかし、Collat​​ionKeyを使用してcompareTo()メソッドを実装するにはどうすればよいですか?Collat​​ionKeyを使用する場合、私が理解している限り、すべての比較メソッドを自分で完全に作成する必要があります。そのため、Collections.sort()メソッドを使用できなくなります...理解しやすい例と、Collat​​ionKeyを使用してPersonオブジェクトのコレクションを並べ替える最も効率的な実装に非常に感謝しています。

ありがとうございました!

0 投票する
3 に答える
999 参照

java - Java ジェネリックの楽しみ

ジェネリックを使用し、コンパイラの警告を回避して、以下のコードを記述する方法を知っている人はいますか? (@SuppressWarnings("unchecked") は不正行為と見なされます)。

そして、おそらく、「左」のタイプが「右」のタイプと同じであることをジェネリックを介して確認しますか?

0 投票する
11 に答える
222950 参照

java - クラスはいつComparableおよび/またはComparatorである必要がありますか?

ComparableComparatorの両方を実装するクラスを見てきました。これは何を意味するのでしょうか?なぜ私は一方を他方の上に使用するのですか?