0

LinkedList、LinkedHashMap、TreeMap などの Java 動的リストまたはマップを検討します。どのオブジェクトにも次のオブジェクトへの参照 (next->) があると思います (私は正しいですか?)。Java でこれらの参照 (next->) にアクセスする方法 (メソッドなど) がないのはなぜですか?

私の懸念は、これが可能であれば、LinkedList を魔法のように 2 つのリストに分割して、多くの CPU オーバーヘッドを節約できることです。ここで行うことは、リストの一部 (new Sublist()...) をコピーしてから、元のリストの対応するエントリをクリアすることです。

4

3 に答える 3

2

私の懸念は、これが可能であれば、LinkedArrayList を魔法のように 2 つのリストに分割して、多くの CPU オーバーヘッドを節約できることです。ここで行うことは、リストの一部 (new Sublist()...) をコピーしてから、元のリストの対応するエントリをクリアすることです。

これを行うと、リストの API の外部でリストの内部データ構造を変更することになり、リストの他の内部パラメーターが同期しなくなります。つまり、リンクされたリストを構成し、リストに追加したオブジェクトを保持するノードは、リストに対してプライベートです。つまり、LinkedListインスタンスを作成するときは、ノードにアクセスできません。

于 2013-04-17T12:40:34.997 に答える
1

「次の」ポインタへのアクセスは、実装の詳細です。パフォーマンスを節約することは正しいですが、オブジェクト指向の観点からは、そのような詳細に依存するべきではありません。結局のところ、実装はまったく異なる可能性があり、次のポインターさえありません。パフォーマンスが心配な場合は、独自の特定のソリューションを実装するか、別のアプローチ/言語を使用する必要があります。

于 2013-04-17T12:38:24.993 に答える
0

コレクション内の個々のオブジェクトにアクセスする方法については、コレクション クラスごとに実装が異なります。たとえば。Arraylistクラスは個々のオブジェクトを Object の配列として格納しますが、クラスLinkedListは内部クラスを使用しEntryて個々のオブジェクトを格納します。ただし、これらのメンバーはカプセル化され、プライベートとしてマークされているため、プログラマには表示されません。この背後にある主な理由は、メソッドの実装方法を気にせずにさまざまな操作を実行するための単純なメソッド セットをプログラマーに提供することです。

私の懸念は、これが可能であれば、LinkedList を魔法のように 2 つのリストに分割して、多くの CPU オーバーヘッドを節約できることです。ここで行うことは、リストの一部 (new Sublist()...) をコピーしてから、元のリストの対応するエントリをクリアすることです。

通常、コレクションを管理し、分割などの操作を実行するメンバーを取得することはありません。ただし、これらのメンバーにアクセスしてパフォーマンスを向上させたい場合は、いつでも独自のクラスを作成できます。これにより、「次」を取得できます。のような事前定義されたクラスの既存のコードをいつでも微調整してLinkedList、独自のクラスを作成できますMyLinkedList。または、これらのクラスを拡張して独自のメソッドを作成することもできます。

于 2013-04-17T12:51:41.273 に答える