「Javaクラッシュコース」をすぐに教えているかもしれません。オーディエンスメンバーがBig-O表記法を知っていると想定するのはおそらく安全ですが、さまざまなコレクション実装でのさまざまな操作の順序を知っていると想定するのはおそらく安全ではありません。
サマリーマトリックスを自分で生成するのに時間がかかりますが、パブリックドメインのどこかに既にある場合は、それを再利用したいと思います(もちろん、適切なクレジットを使用して)。
誰もがポインタを持っていますか?
このWebサイトはかなり優れていますが、Javaに固有ではありません。 http://bigocheatsheet.com/
本 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の下部には、適切なリンクがいくつか含まれています。
各コレクションクラスのSunからのJavadocは、通常、あなたが望むものを正確に教えてくれます。 HashMap 、例:
この実装は、ハッシュ関数がバケット間で要素を適切に分散すると仮定して、基本操作(getおよびput)にconstant-time performanceを提供します。コレクションビューの反復には、HashMapインスタンスの「容量」に比例する時間(バケットの数)とそのサイズ(キーと値のマッピングの数)が必要です。
TreeMap :
この実装は、containsKey、get、put、およびremove操作にlog(n)time costの保証を提供します。
ツリーセット :
この実装は、基本操作のlog(n)時間の保証(追加、削除、および含有)を提供します。
(エンファシス鉱山)
上記の男は、HashMap/HashSetとTreeMap/TreeSetの比較を行いました。
ArrayListとLinkedListについて説明します。
配列リスト:
get()
add()
ListIterator.add()
またはIterator.remove()
を使用して途中で要素を挿入または削除すると、後続のすべての要素をシフトするためにO(n)になりますLinkedList:
get()
add()
ListIterator.add()
またはIterator.remove()
を使用して途中で要素を挿入または削除すると、O(1)になります