私は、Javaコレクションを学ぶしようとしています。しかし、私はコレクションのメソッドを呼び出しについて理解することができない特別な構文があります。同様.toString()
または.sort()
例えば、
私たちは配列クラスやコレクションクラスからメソッドの下に呼んでいる理由を理解していません。印刷アレイでは、これは内部で呼ばれていますprintln()
。
Arrays.toString(myArray);
リストをソートします
Collections.sort(myList);
そして、なぜありませんか?
myArray.toString();
myList.sort();
いずれかは、それを通して私を歩くことができますか?
最初の行からのドキュメント:
コレクションフレームワークは、独立して、それらの表現の詳細を操作するためにそれらを可能にする、コレクションを表現し、操作するための統一されたアーキテクチャです。これは、パフォーマンスを向上させながら努力をプログラミング低減します。それは、無関係のAPI間の相互運用を可能にする新しいAPIを設計し、学習に労力を削減し、ソフトウェアの再利用を促進します。フレームワークは、ダース以上のコレクションインタフェースに基づいています。それはそれらを操作するためにこれらのインタフェースとアルゴリズムの実装を含みます。
目的は、コードの重複を減らすことです。以下の場合はmyList.sort()
、のすべての実装List
インタフェースが実装しなければならないsort
機能を、各実装のソートは、行動を変えることができます。しかし、上の静的メソッドとしてCollections
クラス、List
実装はソート機能を実装する必要はありません。ユーザーの観点から、あなたは何でも渡すことができますList
あなたが持っているCollections.sort()
と起こるために何が起こっているか知っています。
Javaの8ので、この機能は何であるデフォルトメソッドで実装されている可能性がList.sort(comparator)
ありません。デフォルトの方法はとてもJavaの8から、すべての実装にインタフェースで定義された実装を受信するためのインターフェースを許可されません行うことが可能myList.sort()
あなたはどのように比較関数を提供することで、並べ替えるためにそれを伝えるために持っていることを警告し、。たとえば、あなたが持っていると仮定するとList<Integer>
:mylist.sort(Integer::compareTo)
。しかしため、したがって必要コレクション・フレームワークの事前日付のデフォルトメソッド、Collections.sort()
。
などCollections.sort()
とList.sort(comparator)
、あなたも使用することができますStream.sorted()
:myList.stream().sorted().collect(Collectors.toList());