PersistentVector is an array-like collection of values indexed by contiguous 0-based integer index
and optimized for growing/shrinking at the end.
PersistentVector optimizes the following operations:
- Get element count
- Lookup element by index
- Update element by index
- Adding new element to the end
- Removing element from the end
- Enumeration
Get count operation is O(1), most others are O(log32(N)).
PersistentVector is implemented as a trie with 32-way branching at each level and uses structural sharing for updates.
All ideas are borrowed directly from Clojure, yet the implementation (and all the bugs) are my own.
Add persistent_vector to your list of dependencies in mix.exs:
def deps do
[
{:persistent_vector, "~> 0.1.4"}
]
endAnd then run mix deps.get
See Benchmarks