Practice implementations of some common data structures and algorithms in java.
Aims:
- reinvent the wheel (for the fun of it)
- ✔ null not used at all (used Guava Optional)
- 100% unit test coverage
- ✔ add
- ✔ iterate
- ✔ find
- delete
- rebalance
- ✔ thread-safe with minimal locking
- ✔ persist to disk and load from disk efficiently
- ✔ use log structure storage (LSS)
- ✔ use multiple files for LSS
- recover unused LSS storage
- ✔ append only batched writes
- enable snapshots/transactions
- ✔ tuneable memory use (can use disk when required)
Code should be
- Elegant
- Concise
- Readable
Coder should
- Leverage symmetry
- Favour immutability
- Minimize overlap of unit tests
- Maximize coverage of unit tests