ホームページ >Java >&#&チュートリアル >指定されたスタックから重複を削除する Java プログラム
この記事では、Java のスタックから重複要素を削除する 2 つの方法を検討します。 ネストされたループを使用した単純なアプローチと、HashSet を使用したより効率的な方法を比較します。目標は、重複の削除を最適化する方法を実証し、各アプローチのパフォーマンスを評価することです。
重複した要素をスタックから削除する Java プログラムを作成します。
入力
リーリー出力
リーリー特定のスタックから重複を削除するには、2 つのアプローチがあります -
以下は、Java プログラムが最初にランダムなスタックを構築し、その後使用するためにその複製を作成します -
initData
は、指定されたサイズと 1 ~ 100 の範囲のランダムな要素を持つスタックを作成するのに役立ちます。
manualCloneStack
は、別のスタックからデータをコピーしてデータを生成し、それを 2 つのアイデア間のパフォーマンス比較に使用します。
以下は、素朴なアプローチを使用して特定のスタックから重複を削除する手順です -
以下は、素朴なアプローチを使用して特定のスタックから重複を削除する Java プログラムです -
リーリー素朴なアプローチの場合、
を使用しますStack<Integer> data = initData(10L);はスタック内のすべての要素を通過する最初のループを処理し、2 番目のループは
<pre class="brush:php;toolbar:false">Unique elements using Naive Approach: [1, 4, 3, 2, 8, 7, 5]
Time spent for Naive Approach: 18200 nanoseconds
Unique elements using Optimized Approach: [1, 4, 3, 2, 8, 7, 5]
Time spent for Optimized Approach: 34800 nanoseconds</pre>
で要素がすでに存在するかどうかを確認します。以下は、最適化されたアプローチを使用して特定のスタックから重複を削除する手順です -
リーリー
最適化されたアプローチには、を使用します 一意の要素を Set に格納するには、ランダムな要素にアクセスするときに
O(1) の複雑さ を利用して、要素が存在するかどうかを確認する計算コストを削減します。両方のアプローチを併用する
例
リーリー
出力
* 測定単位はナノ秒です。
public static void main(String[] args) { Stack<Integer> data1 = initData(<number of stack size want to test>); Stack<Integer> data2 = manualCloneStack(data1); idea1(data1); idea2(data2); }
Method | 100 elements | 1000 elements |
10000 elements |
100000 elements |
1000000 elements |
Idea 1 | 693100 |
4051600 |
19026900 |
114201800 |
1157256000 |
Idea 2 | 135800 |
681400 |
2717800 |
11489400 |
36456100 |
As observed, the time running for Idea 2 is shorter than for Idea 1 because the complexity of Idea 1 is O(n²), while the complexity of Idea 2 is O(n). So, when the number of stacks increases, the time spent on calculations also increases based on it.
以上が指定されたスタックから重複を削除する Java プログラムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。