Этот ответ будет очень специфичным для текущей реализации, найденной в JDK, так что имейте это в виду.
Мне известно, что Java 8 обновляет класс HashMap, поэтому при возникновении коллизии вместо создания связанного списка элементов с одинаковым хэш-кодом в корзине создается дерево.
Это также относится и к хеш-таблице?
Нет. Hashtable всегда будет таблицей связанных списков. Разработчики Java не обновляли Hashtable для этого варианта использования. Это также должно прояснить, что вы, вероятно, не должны использовать Hashtable в любом случае.
И является ли дерево методом хранения по умолчанию даже до столкновения?
Опять же, это в Java 8, на сегодняшний день, но нет, это не поведение по умолчанию. Как только запись сегмента достигает 8 связанных элементов , HashMap превращает этот связанный список в двоичное дерево.
Кроме того, как java гарантирует, что хеш-таблица является поточно-ориентированной? Создает ли он очередь, когда два потока пытаются одновременно получить доступ к части данных?
Путем синхронизации каждого метода, что означает, что каждый поток будет ставиться в очередь в методе, в то время как другой поток в настоящее время обращается к любому методу Hashtable. Это вызывает немало проблем, если вы хотите делать такие вещи, как атомарные путы или атомные вычисления.
Если вам нужна многопоточная карта HashMap, всегда используйте ConcurrentHashMap, а не Hashtable.