文字列のリンクリストがあるとしましょう。このリンクされたリストを印刷する最も効率的な方法は何ですか?
4 に答える
@ティロは正しいです。明らかな解決策は正しいものです...文字列を悲観的な方法でフォーマットしたり(たとえば、1つの大きな文字列に追加するなど)、暗黙のうちに出力を過度にフラッシュしたりしない限り。
しかし、他に言う必要があるのは次のことです。
パフォーマンスや効率性に執着しないでください。
ほとんどの場合、このようなもののパフォーマンス/効率は重要ではありません。そしてこの場合、何か重大な過ちを犯さない限り、リストのフォーマットにかかる時間は、文字の出力にかかる時間に比べて小さい可能性が高く、プログラム全体の実行にかかる時間に比べて TINY です。
そして、コンピュータが答えを出すのを待っているエンドユーザーのために節約されるよりも、実際にはこの問題について考えるのに多くの時間を費やしている可能性がかなりあります。
パフォーマンスが重要になる場合があります。しかし、ここで重要になる可能性は低いです。努力が必要であるという証拠がある場合にのみ、物事を高速化するために努力を費やす方がよいでしょう。最初にプログラムを動作させ、プロファイリングしてから、最適化に価値があるかどうかを判断してください。
任意のリストまたは配列と同じ: 要素をループし、それぞれを順番に出力します。の上)。
LinkedList
最初にを配列に変換し( を使用.toArray(new String[0])
)、次にArrays.deepToString()を使用して出力できます。
Arrays.deepToString(convertedArray);
Java コレクションは、データ構造に固有の最適化された反復子を実装します。具体的にLinkedList
は、反復子は最後に返された要素へのポインターを保持して、一定の時間next()
とprevious()
操作を可能にします。
一方、各要素をコンソールに出力したい場合、最良の方法はバッファを使用することです。
PrintWriter out = new PrintWriter(System.out, false); // autoFlush false
// for-each or iterator
// out.print(obj);
out.flush(); // flush to the output
のみを使用するSystem.out
と、各操作がすぐに出力に送信されますが、これは遅くなる可能性があります。パフォーマンスを向上させるために、一部のアプリ サーバーでログ レベルを無効にするか変更することを確認しましたか?