もうすぐ「Java クラッシュ コース」を教えることになるかもしれません。聴衆メンバーが Big-O 記法を知っていると想定するのはおそらく安全ですが、さまざまなコレクション実装でのさまざまな操作の順序が何であるかを知っていると想定するのはおそらく安全ではありません。
自分で要約マトリックスを生成するのに時間をかけることもできますが、それがすでにどこかで公開されている場合は、それを再利用したいと思います (もちろん、適切なクレジットを付けて)。
誰にも指針がありますか?
もうすぐ「Java クラッシュ コース」を教えることになるかもしれません。聴衆メンバーが Big-O 記法を知っていると想定するのはおそらく安全ですが、さまざまなコレクション実装でのさまざまな操作の順序が何であるかを知っていると想定するのはおそらく安全ではありません。
自分で要約マトリックスを生成するのに時間をかけることもできますが、それがすでにどこかで公開されている場合は、それを再利用したいと思います (もちろん、適切なクレジットを付けて)。
誰にも指針がありますか?
本Java Generics and Collectionsにこの情報があります (ページ: 188、211、222、240)。
実装のリスト:
get add contains next remove(0) iterator.remove
ArrayList O(1) O(1) O(n) O(1) O(n) O(n)
LinkedList O(n) O(1) O(n) O(1) O(1) O(1)
CopyOnWrite-ArrayList O(1) O(n) O(n) O(1) O(n) O(n)
実装の設定:
add contains next notes
HashSet O(1) O(1) O(h/n) h is the table capacity
LinkedHashSet O(1) O(1) O(1)
CopyOnWriteArraySet O(n) O(n) O(1)
EnumSet O(1) O(1) O(1)
TreeSet O(log n) O(log n) O(log n)
ConcurrentSkipListSet O(log n) O(log n) O(1)
マップの実装:
get containsKey next Notes
HashMap O(1) O(1) O(h/n) h is the table capacity
LinkedHashMap O(1) O(1) O(1)
IdentityHashMap O(1) O(1) O(h/n) h is the table capacity
EnumMap O(1) O(1) O(1)
TreeMap O(log n) O(log n) O(log n)
ConcurrentHashMap O(1) O(1) O(h/n) h is the table capacity
ConcurrentSkipListMap O(log n) O(log n) O(1)
キューの実装:
offer peek poll size
PriorityQueue O(log n) O(1) O(log n) O(1)
ConcurrentLinkedQueue O(1) O(1) O(1) O(n)
ArrayBlockingQueue O(1) O(1) O(1) O(1)
LinkedBlockingQueue O(1) O(1) O(1) O(1)
PriorityBlockingQueue O(log n) O(1) O(log n) O(1)
DelayQueue O(log n) O(1) O(log n) O(1)
LinkedList O(1) O(1) O(1) O(1)
ArrayDeque O(1) O(1) O(1) O(1)
LinkedBlockingDeque O(1) O(1) O(1) O(1)
java.utilパッケージの javadoc の下部には、いくつかの適切なリンクが含まれています。
この Web サイトは非常に優れていますが、Java に特化したものではありません: http://bigocheatsheet.com/
各コレクション クラスの Sun からの Javadoc は、通常、必要なものを正確に示します。HashMap、例:
この実装は、ハッシュ関数が要素をバケット間で適切に分散すると仮定すると、基本操作 (get および put)に対して一定時間のパフォーマンスを提供します。コレクション ビューの反復には、HashMap インスタンスの「容量」 (バケットの数) とそのサイズ (キーと値のマッピングの数) に比例する時間が必要です。
この実装では、containsKey、get、put、remove 操作の保証された log(n) 時間コストが提供されます。
この実装は、基本的な操作(追加、削除、および含む)の保証された log(n) 時間コストを提供します。
(私のものを強調)
上記の人は、HashMap / HashSet と TreeMap / TreeSet の比較を行いました。
ArrayList と LinkedList について説明します。
配列リスト:
get()
add()
ListIterator.add()
またはを使用して途中の要素を挿入または削除するIterator.remove()
と、後続のすべての要素をシフトするのに O(n) になりますリンクリスト:
get()
add()
ListIterator.add()
またはを使用して途中で要素を挿入または削除するIterator.remove()
と、O(1) になります。