A portfolio of Java programming projects completed as part of COMS W3134 (Data Structures in Java) at Columbia University. Each project demonstrates core CS concepts including algorithm design, object-oriented programming, and data structure implementation from scratch.
Directory: square-root/src/SquareRoot.java
Implements the Babylonian (Newton's method) algorithm to compute square roots iteratively to a configurable precision (epsilon). Handles edge cases including negative numbers, zero, NaN, and infinity.
-
Concepts: Iterative numerical methods, error tolerance, command-line argument parsing
-
- Key method:
sqrt(double num, double epsilon)
Directory:
recursive-algorithms/src/Recursion.javaA suite of six recursive algorithms implemented without any iterative constructs, demonstrating mastery of base cases, recursive decomposition, and helper-method patterns.
-
Concepts: Recursion, tail recursion, string manipulation, array traversal
-
- Methods:
recursiveMultiplication,reverse,max,isPalindrome,isMember,separateIdentical
Directory:
custom-list/src/From-scratch implementations of
ArrayListandLinkedListconforming to a customMyListinterface, plus aMadLibGeneratorapplication that uses the lists to parse and fill in Mad Libs templates.-
Concepts: Dynamic arrays, doubly-linked lists, generics, iterator pattern
-
- Files:
MyArrayList.java,MyLinkedList.java,MyList.java,MadLibGenerator.java
Directory:
expression-evaluator/src/Implements a
MyStackinterface backed by a linked list, then uses two stacks (operands + operators) to evaluate arithmetic infix expressions with full operator precedence and parenthesis support.-
Concepts: Stack ADT, expression parsing, operator precedence, OOP design
-
- Files:
MyStack.java,IntCalculator.java,MyArrayList.java
Directory:
unit-tests/lib/Comprehensive JUnit 5 test suite validating the custom data structure implementations from previous assignments. Covers boundary conditions, exception handling, and correctness of all public APIs.
-
Concepts: Unit testing, test-driven development, JUnit 5, boundary analysis
-
- Tools: JUnit Jupiter 5.10, Hamcrest
Directory:
tree-maps/src/Full implementations of
BSTreeMapandRBTreeMapconforming to aMyMapinterface. The Red-Black Tree maintains self-balancing invariants through rotations and recoloring, guaranteeing O(log n) operations.-
Concepts: BST, self-balancing trees, tree rotations, red-black invariants, map ADT
-
- Files:
BSTreeMap.java,RBTreeMap.java,MyMap.java,Node.java,RBNode.java
Directory:
hash-map/src/Custom
MyHashMapimplementation using an array of linked lists (separate chaining) for collision resolution, with dynamic resizing and a polynomial rolling hash function.-
Concepts: Hash tables, separate chaining, load factor, dynamic resizing, hash functions
-
- Files:
MyHashMap.java,MyMap.java,Entry.java
Directory:
inversion-counter/src/Counts the number of inversions in an integer array using a modified merge sort algorithm in O(n log n) time, compared against a brute-force O(n²) baseline.
-
Concepts: Divide and conquer, merge sort, algorithm complexity analysis
-
- Files:
InversionCounter.java
Tool Version Java 17+ JUnit Jupiter 5.10 IDE IntelliJ IDEA
COMS W3134 — Data Structures in Java Columbia University
- Files:
- Files:
- Files:
- Files:
- Files:
- Methods:
- Key method: