From cfa66f82edd643aac782cf51e3ce2d1eba87192d Mon Sep 17 00:00:00 2001
From: "Dwight D. Eisenhower National System of Interstate and Defense
 Highways" <thx@cs.washington.edu>
Date: Tue, 19 Oct 2021 15:02:54 -0700
Subject: [PATCH] Refactor to Java Map-based HashTrieNode

---
 .../dictionaries/HashTrieMap.java             | 21 +++++++------------
 .../p2/wordcorrector/AutocompleteTrie.java    | 14 ++++++-------
 2 files changed, 13 insertions(+), 22 deletions(-)

diff --git a/src/main/java/datastructures/dictionaries/HashTrieMap.java b/src/main/java/datastructures/dictionaries/HashTrieMap.java
index c4ee60b..279c61b 100644
--- a/src/main/java/datastructures/dictionaries/HashTrieMap.java
+++ b/src/main/java/datastructures/dictionaries/HashTrieMap.java
@@ -1,16 +1,13 @@
 package datastructures.dictionaries;
 
-import cse332.datastructures.containers.Item;
 import cse332.exceptions.NotYetImplementedException;
-import cse332.interfaces.misc.Dictionary;
-import cse332.interfaces.misc.SimpleIterator;
 import cse332.interfaces.trie.TrieMap;
 import cse332.types.BString;
 
-import java.util.AbstractMap.SimpleEntry;
+import java.util.HashMap;
 import java.util.Iterator;
+import java.util.Map;
 import java.util.Map.Entry;
-import java.util.function.Supplier;
 
 /**
  * See cse332/interfaces/trie/TrieMap.java
@@ -18,27 +15,23 @@ import java.util.function.Supplier;
  * for method specifications.
  */
 public class HashTrieMap<A extends Comparable<A>, K extends BString<A>, V> extends TrieMap<A, K, V> {
-    public class HashTrieNode extends TrieNode<Dictionary<A, HashTrieNode>, HashTrieNode> {
+    public class HashTrieNode extends TrieNode<Map<A, HashTrieNode>, HashTrieNode> {
         public HashTrieNode() {
             this(null);
         }
 
         public HashTrieNode(V value) {
-            this.pointers = new ChainingHashTable<A, HashTrieNode>(new Supplier<Dictionary<A, HashTrieNode>>() {
-                @Override
-                public Dictionary<A, HashTrieNode> get() {
-                    return new MoveToFrontList<>();
-                }
-            });
+            this.pointers = new HashMap<>();
             this.value = value;
         }
 
         @Override
-        public Iterator<Entry<A, HashTrieNode>> iterator() {
-            throw new NotYetImplementedException();
+        public Iterator<Entry<A, HashTrieMap<A, K, V>.HashTrieNode>> iterator() {
+            return pointers.entrySet().iterator();
         }
     }
 
+
     public HashTrieMap(Class<K> KClass) {
         super(KClass);
         throw new NotYetImplementedException();
diff --git a/src/main/java/p2/wordcorrector/AutocompleteTrie.java b/src/main/java/p2/wordcorrector/AutocompleteTrie.java
index 3afe9db..aee2144 100644
--- a/src/main/java/p2/wordcorrector/AutocompleteTrie.java
+++ b/src/main/java/p2/wordcorrector/AutocompleteTrie.java
@@ -1,11 +1,8 @@
-
 package p2.wordcorrector;
 
 import cse332.types.AlphabeticString;
 import datastructures.dictionaries.HashTrieMap;
 
-import java.util.Map.Entry;
-
 public class AutocompleteTrie extends HashTrieMap<Character, AlphabeticString, Integer> {
 
     public AutocompleteTrie() {
@@ -16,10 +13,12 @@ public class AutocompleteTrie extends HashTrieMap<Character, AlphabeticString, I
         @SuppressWarnings("unchecked")
         HashTrieNode current = (HashTrieNode) this.root;
         for (Character item : key.toCharArray()) {
-            current = current.pointers.find(item);
-            if (current == null) {
+            if (!current.pointers.containsKey(item)) {
                 return null;
             }
+            else {
+                current = current.pointers.get(item);
+            }
         }
 
         String result = key;
@@ -28,9 +27,8 @@ public class AutocompleteTrie extends HashTrieMap<Character, AlphabeticString, I
             if (current.value != null) {
                 return null;
             }
-            Entry<Character, HashTrieNode> next = current.iterator().next();
-            result += next.getKey();
-            current = next.getValue();
+            result += current.pointers.keySet().iterator().next();
+            current = current.pointers.values().iterator().next();
         }
 
         // Switch this to return null to only complete if we're at the end of
-- 
GitLab