From 0a5ddbe2533985a57039fe20686d3c7e6f0cb8e4 Mon Sep 17 00:00:00 2001 From: Joao Fraga Date: Thu, 26 Sep 2024 14:16:10 +0100 Subject: [PATCH] docs: dsa.md --- content/post/dsa.md | 337 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 337 insertions(+) create mode 100644 content/post/dsa.md diff --git a/content/post/dsa.md b/content/post/dsa.md new file mode 100644 index 0000000..dccfa65 --- /dev/null +++ b/content/post/dsa.md @@ -0,0 +1,337 @@ +--- +title: "DSA - Data Structures" +description: "Data Structures in Java" +date: 2024-09-26T12:00:00+01:00 +draft: false +--- + +Overview of the most useful data structures from the Java Collections API + +# Arrays + +**Array** + +{{< highlight java >}} +E[] array = new E[10]; +int n = array.length; + +E element = array[0]; +array[0] = element; + +array.add(element); +array.add(index, element); +array.addAll(collection); +array.addAll(index, collection); + +E element = array.get(index); + +E removed = array.remove(index); +array.clear(); + +boolean isEmpty = array.isEmpty(); +boolean contains = array.contains(element); +int index = array.indexOf(element); + +Arrays.sort(array); +Arrays.sort(array, Collections.reverseOrder()); +Arrays.sort(array, (E e1, E e2) -> e1.compareTo(e2)); + +int index = Arrays.binarySearch(array, element); +{{< / highlight >}} + +**Running times**: + +| Operation | Time Complexity | +| --------- | --------------- | +| Get | O(1) | +| IndexOf | O(n) | +| Add | O(n) | +| Remove | O(n) | + +--- + +# Dynamic Array + +**ArrayList** + +{{< highlight java >}} +ArrayList list = new ArrayList<>(); +int n = list.size(); + +list.add(element); +list.add(index, element); +list.addAll(collection); +list.addAll(index, collection); + +E element = list.get(index); + +E removed = list.remove(index); +list.clear(); + +boolean isEmpty = list.isEmpty(); +boolean contains = list.contains(element); +int index = list.indexOf(element); + +Collections.sort(list); +Collections.sort(list, Collections.reverseOrder()); +Collections.sort(list, (E e1, E e2) -> e1.compareTo(e2)); + +int index = Collections.binarySearch(list, element); +{{< / highlight >}} + +**Running times**: + +| Operation | Time Complexity | +| --------- | --------------- | +| Get | O(1) | +| IndexOf | O(n) | +| Add | O(1) | +| Remove | O(n) | + +--- + +# Lists + +**LinkedList** + +{{< highlight java >}} +LinkedList list = new LinkedList<>(); +int n = list.size(); + +list.add(element); +list.add(index, element); +list.addAll(collection); +list.addAll(index, collection); + +E element = list.get(index); + +E removed = list.remove(index); +list.clear(); + +boolean isEmpty = list.isEmpty(); +boolean contains = list.contains(element); +int index = list.indexOf(element); + +Collections.sort(list); +Collections.sort(list, Collections.reverseOrder()); +Collections.sort(list, (E e1, E e2) -> e1.compareTo(e2)); + +int index = Collections.binarySearch(list, element); +{{< / highlight >}} + +**Running times**: + +| Operation | Time Complexity | +| --------- | --------------- | +| Get | O(n) | +| IndexOf | O(n) | +| Add | O(n) | +| Remove | O(n) | + +--- + +# Stacks + +**LinkedList** + +{{< highlight java >}} +LinkedList stack = new LinkedList<>(); + +stack.push(element); +E top = stack.peek(); +E popped = stack.pop(); + +boolean isEmpty = stack.isEmpty(); +int size = stack.size(); +{{< / highlight >}} + +**Running times**: + +| Operation | Time Complexity | +| --------- | --------------- | +| Push | O(1) | +| Peek | O(1) | +| Pop | O(1) | + +--- + +# Queues + +**LinkedList** + +{{< highlight java >}} +LinkedList queue = new LinkedList<>(); + +queue.offer(element); +E head = queue.peek(); +E removed = queue.poll(); + +boolean isEmpty = queue.isEmpty(); +int size = queue.size(); +{{< / highlight >}} + +**Running times**: + +| Operation | Time Complexity | +| --------- | --------------- | +| Offer | O(1) | +| Peek | O(1) | +| Poll | O(1) | + +**PriorityQueue** (Heap Implementation) + +{{< highlight java >}} +PriorityQueue priorityQueue = new PriorityQueue<>(); +PriorityQueue priorityQueue = new PriorityQueue<>(Collections.reverseOrder()); +PriorityQueue priorityQueue = new PriorityQueue<>((E e1, E e2) -> e1.compareTo(e2)); +int size = priorityQueue.size(); + +priorityQueue.offer(element); +E head = priorityQueue.peek(); +E removed = priorityQueue.poll(); + +boolean isEmpty = priorityQueue.isEmpty(); +boolean contains = priorityQueue.contains(element); +{{< / highlight >}} + +**Running times**: + +| Operation | Time Complexity | +| --------- | --------------- | +| Offer | O(log n) | +| Peek | O(1) | +| Poll | O(log n) | + +--- + +# Sets + +**HashSet** + +{{< highlight java >}} +HashSet set = new HashSet<>(); +int n = set.size(); + +set.add(element); + +set.remove(element); +set.clear(); + +boolean isEmpty = set.isEmpty(); +boolean contains = set.contains(element); +{{< / highlight >}} + +**Running times**: + +| Operation | Time Complexity | +| --------- | -------------------------------------------- | +| Add | O(1) (degrades to O(n) with hash collisions) | +| Remove | O(1) (degrades to O(n) with hash collisions) | +| Contains | O(1) (degrades to O(n) with hash collisions) | + +**TreeSet** + +{{< highlight java >}} +TreeSet set = new TreeSet<>(); +TreeSet set = new TreeSet<>(Collections.reverseOrder()); +TreeSet set = new TreeSet<>((E e1, E e2) -> e1.compareTo(e2)); +int n = set.size(); + +set.add(element); + +E first = set.first(); +E last = set.last(); + +E before = set.lower(element); +E after = set.higher(element); + +set.remove(element); +set.clear(); + +SortedSet sub = set.subSet(fromElement, fromInclusive, toElement, toInclusive); +SortedSet tail = set.tailSet(fromElement, inclusive); +SortedSet head = set.headSet(toElement, inclusive); + +boolean isEmpty = set.isEmpty(); +boolean contains = set.contains(element); +{{< / highlight >}} + +**Running times**: + +| Operation | Time Complexity | +| --------- | --------------- | +| Add | O(log n) | +| Remove | O(log n) | +| Contains | O(log n) | + +--- + +# Maps + +**HashMap** + +{{< highlight java >}} +HashMap map = new HashMap<>(); +int n = map.size(); + +map.put(key, value); + +V value = map.get(key); + +map.remove(key); +map.clear(); + +boolean isEmpty = map.isEmpty(); +boolean containsKey = map.containsKey(key); +boolean containsValue = map.containsValue(value); +{{< / highlight >}} + +**Running times**: + +| Operation | Time Complexity | +| ------------- | -------------------------------------------- | +| Put | O(1) (degrades to O(n) with hash collisions) | +| Get | O(1) (degrades to O(n) with hash collisions) | +| Remove | O(1) (degrades to O(n) with hash collisions) | +| ContainsKey | O(1) (degrades to O(n) with hash collisions) | +| ContainsValue | O(n) | + +**TreeMap** + +{{< highlight java >}} +TreeMap map = new TreeMap<>(); +TreeMap map = new TreeMap<>(Collections.reverseOrder()); +TreeMap map = new TreeMap<>((K k1, K k2) -> k1.compareTo(k2)); +int n = map.size(); + +map.put(key, value); + +V value = map.get(key); + +K firstKey = map.firstKey(); +K lastKey = map.lastKey(); + +K beforeKey = map.lowerKey(key); +K afterKey = map.higherKey(key); + +map.remove(key); +map.clear(); + +NavigableMap sub = map.subMap(fromKey, fromInclusive, toKey, toInclusive); +NavigableMap tail = map.tailMap(fromKey, inclusive); +NavigableMap head = map.headMap(toKey, inclusive); + +boolean isEmpty = map.isEmpty(); +boolean containsKey = map.containsKey(key); +boolean containsValue = map.containsValue(value); +{{< / highlight >}} + +**Running times**: + +| Operation | Time Complexity | +| ------------- | --------------- | +| Put | O(log n) | +| Get | O(log n) | +| Remove | O(log n) | +| ContainsKey | O(log n) | +| ContainsValue | O(n) |