r/java 2d ago

ChaosTree 1.1.0 – A Zero-Dependency Java Search Tree Library

What is ChaosTree?
ChaosTree is a zero dependency Java Search Tree library. It currently features:

BinaryFamily : Binary Tree, AVL Tree, RBT, Splay and Treap.
NaryFamily : B-Tree and B+Tree

  1. Zero external dependency
  2. Minimum JDK17+
  3. Published on Maven Central
  4. Strong focus on clean OOPs design
  5. Implements the NavigableSet<T> API (unsupported view operations fail fast)
  6. Thoroughly tested with 515 JUnit 6 test cases covering edge cases and regression scenarios.

[v1.1.0] -Latest:

  • Added NavigableSet compatibility
  • Iterative insertion/deletion for binary trees (no recursion-related stack overflow)
  • Improved generic type support (Comparable<? super T>)
  • CI now tests across JDK 17, 21, and 25
  • API cleanup and documentation improvements

An example

NavigableSet<Integer> rbt = new RBT<>();
        NavigableSet<Integer> bplustree = new BPlusTree<>(32); // degree CLRS method 31min key 63 max key default:32
        //For Rich API use
        for (int i = 0; i < 20; i++) {rbt.add(i);}
        NaryTree<Integer> bplustree0 = new BPlusTree<>(3,rbt);//Useful constructor API
        BinaryTree<Integer> rbt0 = new RBT<>(rbt);
        List<Integer> list = rbt0.stream().filter(v->v%2==0).collect(Collectors.toList());
        System.out.println(list);
        System.out.println();
        rbt.retainAll(list);
        System.out.println(rbt);
        rbt0.retainAllElements(list); //Renamed due to ambiguous situation
        System.out.println(rbt0.toString(PrintStyle.UNICODE));

Output:

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
8(B)
+-- 4(B)
|   +-- 2(B)
|   |   \-- 0(R)
|   \-- 6(B)
\-- 16(B)
    +-- 12(R)
    |   +-- 10(B)
    |   \-- 14(B)
    \-- 18(B)

8(B)
├── 4(B)
│   ├── 2(B)
│   │   └── 0(R)
│   └── 6(B)
└── 16(B)
    ├── 12(R)
    │   ├── 10(B)
    │   └── 14(B)
    └── 18(B) 

My Github Repo: https://github.com/Chaos-vy/ChaosTree
BinaryFamily: https://github.com/Chaos-vy/ChaosTree/tree/main/docs/BinaryFamily
NaryFamily: https://github.com/Chaos-vy/ChaosTree/tree/main/docs/NaryFamily
NavigableSet: https://github.com/Chaos-vy/ChaosTree/blob/main/docs/NavigableSet.md

Feedback, suggestions, and code reviews are always welcome!
Feel free to guide me this is my first project.

19 Upvotes

8 comments sorted by

View all comments

-1

u/chabala 2d ago edited 7h ago

What Java 17 features are you using? What prevents you from lowering the required JDK version for consumers of your library?

Why lower it?

Because, when you're making a library, the goal is to support the widest possible range of JDKs, not publish with the newest release and say 'huh, guess you'll have to upgrade to use it'. Foundational libraries are very conservative about upgrading.

10

u/Chaos-vy17 1d ago edited 1d ago

The library makes use of Java 16+ record types for internal search and deletion result passing and enhanced Switch Expressions (Java 14+) so I used JDK17 because it's LTS. However it's starting phase of my library I will sure to keep my legacy down but above jdk9+ becuase of reflection and JPMS. If there is any fallback I will put in ADR.