The BinarySearchST class has good performance for searching: get is O(log(N)).
But, put is still O(N). Why?
Because the keys are in an sorted array. To keep the array sorted on each put operation requires moving N existing items in the worst case.
A binary search tree links nodes together and avoids this moving.
However, to keep good performance for get as well as put, the keys must still be ordered somehow and allow quick access.
A sorted linked list doesn't allow quick access (e.g. to the middle element), but a binary search tree will.