web-dev-qa-db-ja.com

Collection.sort(list)とlist.sort()の違い

単にCollection.sort(list)を呼び出すよりもlist.sort()メソッドを優先する必要がある理由はありますか?内部的にはCollection.sortsortクラスのListメソッドを呼び出すだけです。

ほとんどの人がCollection.sortを使うように言っているのは驚くべきことです。どうして?

35
user5539357

参照しているメソッド List.sort(comparator) はJava 8で導入されましたが、ユーティリティメソッド Collections.sort Java 1.2。

そのため、インターネット上でそのユーティリティメソッドに言及する多くのリファレンスがありますが、それは、JDKにずっと以前から存在しているからです。

Collections.sortの実装の変更は8u20 で行われたことに注意してください。

31
Tunaki

これは単にAPIの変更です。 Javaのように広く普及している言語の場合、通常発生するのはしばらくの間、レガシーサポートを維持するために古い方法が推奨されます。

この期間が経過すると、古いAPIは非推奨になります(または、おそらくそうではなく、両方が無期限にそのまま残る可能性があります)。この期間内に新しいAPIに改良が加えられ、その機能が元の実装からわずかに逸脱し、開発者に採用を促す可能性があります。新しいAPIの要件/結果は少し異なる場合があり、実装は劇的に変わる可能性があります。

その後、最終的に新しいAPIが引き継ぎ、古いAPIは不要になり削除されます。 Javaと広く採用されている言語では、これには数年、または数十年かかる場合があります。開発者はAPIを削除する計画を立てることができますが、コミュニティーにそれを残さざるを得ません。

5
ChrisCM

簡単な答えは、Collections.sortList.sortに委任することです。 1つの呼び出しが他の呼び出しに委譲するため、同等のものがあります。ただし、余分なメソッド呼び出しを単に回避するために、List.sortを使用することをお勧めします。

0
Javier S López