Möglicherweise unterrichte ich bald einen "Java-Crash-Kurs". Während es wahrscheinlich sicher ist anzunehmen, dass die Zuschauer die Big-O-Notation kennen, ist es wahrscheinlich nicht sicher anzunehmen, dass sie die Reihenfolge der verschiedenen Operationen auf verschiedenen Sammlungsimplementierungen kennen.
Ich könnte mir Zeit nehmen, um selbst eine Zusammenfassungsmatrix zu erstellen, aber wenn sie bereits irgendwo öffentlich verfügbar ist, würde ich sie gerne wiederverwenden (natürlich mit angemessener Gutschrift).
Hat jemand irgendwelche Hinweise?
java
collections
big-o
Jared
quelle
quelle
Antworten:
Diese Website ist ziemlich gut, aber nicht spezifisch für Java: http://bigocheatsheet.com/
quelle
Das Buch Java Generics and Collections enthält diese Informationen (Seiten: 188, 211, 222, 240).
Listenimplementierungen:
Implementierungen festlegen:
Kartenimplementierungen:
Warteschlangenimplementierungen:
Das Ende des Javadoc für das Paket java.util enthält einige gute Links:
quelle
Die Javadocs von Sun für jede Sammlungsklasse sagen Ihnen im Allgemeinen genau, was Sie wollen. HashMap zum Beispiel:
Baumkarte :
TreeSet :
(Hervorhebung von mir)
quelle
Der Typ oben gab einen Vergleich zwischen HashMap / HashSet und TreeMap / TreeSet.
Ich werde über ArrayList vs. LinkedList sprechen:
Anordnungsliste:
get()
add()
ListIterator.add()
oder einfügen oder löschenIterator.remove()
, ist es O (n), um alle folgenden Elemente zu verschiebenLinkedList:
get()
add()
ListIterator.add()
oder einfügen oder löschenIterator.remove()
, ist es O (1).quelle
if you insert or delete an element in the middle using ListIterator.add() or Iterator.remove(), it will be O(1)
Warum? Zuerst müssen wir das Element in der Mitte finden. Warum also nicht O (n)?ListIterator.add()
orIterator.remove()
" Wir haben einen Iterator.