Javaサイクルパフォーマンス分析


最近codingの時にサイクルの性能に対してとても好奇心があって、多種のサイクル方式に直面して、反復器、forサイクル、forEachサイクル、lambdaのforEachサイクル.
コードの美しさだけを論じると,個人はlambdaのforEachループとforEachループに偏っている.しかし、このような唐突な選択は性能の低下をもたらす可能性が高い.
その後、各サイクル間の効率を分析しました.
一、ArrayList
size=100000 for:8 forEach:12 Iterator:11 lambda:115size=1000
for:4 forEach:1 Iterator:0 lambda:98
size=10000
for:6 forEach:2 Iterator:1 lambda:107  
sizeが大きい(10万)場合にはforサイクルの性能が最も高く,sizeが大きくない場合にはIteratorとforEachの効率が高いことが分かる.ArrayListの下位層は配列形式であり,それらの取数論理から以下のようにしなければならない.
(1)foreachループとiterator反復器:
foreachの最下位はiteratorループを介してiteratorを呼び出す.next()は,iteratorにおけるnextメソッドの実装についてArrayListを参照すると,最終的には配列下付きスケールで要素を取得していることがわかる.
(2)forサイクル
for文快里直接通过下标取数
(3)lambdaのforEachサイクル
マルチスレッド同時処理をオンにする
以上のように遍歴、取数論理から、forはデータ量が小さいため、index+、indexが多くなる
 
どのように選択するかについては、以下の点をまとめ、参考にしてください.
1.下付き文字の処理操作ペアが必要な場合はforループを選択する.
2.ArrayListについては、コードの簡潔さからforeachを優先し、次の境界を越えて問題を考慮する必要はありません.
3.I/O操作のような実効性の要求が高くない場合、lambdaのforEachサイクルを考慮することができる.
 
二、LinkedList
size=100000
for:18 forEach:10 Iterator:9 lambda:108
 
size=10000
for:9 forEach:3 Iterator:2 lambda:104
 
size=1000
for:4 forEach:1 Iterator:0 lambda:114
このときIteratorは性能が最も良く、LinkedListのデータ構造がチェーンテーブル構造であるため、各ノードには、前駆ノードと後継ノード(ヘッド、テールを除く)が記録されています.下付きスケールで値を取得すると、希望する下付きスケールノードが得られるまでチェーンでチェックされます.IteratorとforEachは、エンドノードまで常にサブノードをループします.コードが簡潔であることを考慮してforEachを使用することをお勧めします.
 
三、HashMap
size=100000 forEach:17 Iterator:13 lambda:125
  size=10000 forEach:4 Iterator:3 lambda:102
  size=1000 forEach:1 Iterator:1 lambda:11     ( entrySet ), Iterator , HashMap 。    HashMap , 。 put key hash , hash map bucket( )。 get hash map bucket, ( hash , hash , get keys.equals() )。     List forEach Iterator , lambda forEach cup 。 HashMap Iterator , forEach 。