Внутри Dictionary <T,K> в C# используется метод открытой адресации (open addressing) или метод цепочек (chaining)?
А что, исходники засекречены?
https://github.com/microsoft/referencesource/blob/master/mscorlib/system/collections/generic/dictionary.cs
Там какая-то лютая помесь двух методов.
В основе микрософтовской реализации таблицы - метод цепочек, как и в Java. Каждая энтри имеет ссылку на следующую c тем же хэш-кодом (по модулю ёмкости таблицы). При поиске просматриваются все элементы цепочки, разные цепочки не пересекаются. Но энтри выделяются не по одной из динамической памяти (как в Java), а сразу массивом, ссылка на который кладётся в поле entries. Энтри - это структура, имеющая семантику значения (а в терминах C# это означает, что она и передаётся по значению, и в массиве лежит её значение). Размер массива - ближайшее простое число, превышающее заданную ёмкость (это какой-то выпендрёж, т.к. вычисление простого числа стоит дорого, а преимуществ не даёт, наверное, по книжке делали без понимания). Цепочки укладываются в этот массив, каждая энтри содержит индекс следующей (у последней в этом поле -1).
Такую же ёмкость имеет и массив buckets. Сюда ходят, когда нужно найти элемент по хэшкоду. Элемент массива - это индекс первой энтри в entries. При добавлении ключа с коллизией новая энтри добавляется в начало списка, но константной сложности это не обеспечивает, т.к. всё равно весь связный список придётся просмотреть перед добавлением. Если для данного хэшкода нет ведра, то соответствующий элемент buckets (хэшкод % ёмкость) содержит -1.
Свободные энтри объединены в отдельный связный список, из которого изымается голова, когда нужна новая энтри.
Фактор заполнения таблицы, таким образом, никогда не превышает единицы, нет избыточной нагрузки на GC, нет фрагментации памяти, что свойственно таблицам с открытой адресацией.
Но при этом отсутствует пробирование, и к каждой ячейке привязано своё ведро в виде связного списка. Упрощается удаление ключа, не нужно дефрагментировать таблицу, что соответствует методу цепочек.
В общем, если выкинуть эту чушь с простыми числами, то получится вполне годная реализация.