Yes it is an array. Effectively the hash is the index in the array. Under the hood (looking at the code right now) it is a Node<K,V>[] and the Node is effectively the linked list which has an int hash, K key, V value and Node<K,V> next. So during retrieval it gets the Node from table[hash] (effectively, there is some complication here.) If the Node returned here passes equality check it returns it. If not then it starts iterating the LinkedList.
I'm not seeing how a BST would really help here since there is no real searching. It seeks to the general ballpark with the hash and then iterates for equality.