まもなく「Javaクラッシュコース」を教えるかもしれません。オーディエンスメンバーがBig-O表記を知っていると想定するのはおそらく安全ですが、さまざまなコレクション実装でのさまざまな操作の順序が何であるかを知っていると想定するのはおそらく安全ではありません。
私は時間をかけて自分で要約行列を生成することもできますが、それがパブリックドメインのどこかにすでに存在している場合は、それを再利用したいと思います(もちろん、適切なクレジットを使用します)。
誰かが何かポインタがありますか?
まもなく「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)に一定時間のパフォーマンスを提供します。コレクションビューの反復には、HashMapインスタンスの "容量"(バケットの数)とそのサイズ(キーと値のマッピングの数)の合計に比例した時間が必要です。
この実装は、containsKey、get、put、およびremoveオペレーションの保証されたlog(n)時間コストを提供します。
この実装は、基本的な操作(追加、削除、および包含)に対して保証された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)になりますif you insert or delete an element in the middle using ListIterator.add() or Iterator.remove(), it will be O(1)
どうして?最初に中央の要素を見つける必要があるので、なぜO(n)でないのですか?
ListIterator.add()
またはIterator.remove()
」を使用して、イテレータを作成しています。