Внутренняя реализация структур данных в Java? - PullRequest
2 голосов
/ 26 мая 2011

Есть ли источник, где я могу найти подробную информацию о реализации различных структур данных в Java (HashMaps, TreeSets и т. Д.).Например: Какая хеш-функция используется для разных типов?Это открытая адресация или что-то еще?Подобные вещи.
PS: я знаю, что могу пройти через исходный код.Но это я уеду на другой день :) 1002 *

Ответы [ 5 ]

4 голосов
/ 26 мая 2011

Поскольку Java является открытым исходным кодом, лучше всего рассмотреть саму реализацию.

Если вы используете Eclipse и настроили исходный код, просто нажмите Ctrl + щелчок левой кнопкой мыши на требуемой декларации структуры данных.Для этого tt откроет исходный код.

Документация по API НЕ дает подробностей реализации.

2 голосов
/ 26 мая 2011

Не знаю после какого уровня детализации вы находитесь?

Я могу сказать вам, что мне достаточно.Я всегда получаю это от NetBeans.Там я могу, удерживая CTRL, щелкнуть любое имя класса, и оно приведет меня к его коду.Таким образом, у вас есть документация и код в одном месте перед вами, и вы можете увидеть, как они реализованы, что они описывают в документе.

Надеюсь, это поможет.

РЕДАКТИРОВАТЬ:

Строка 247 в HashMap, которая создается в HashSet, а затем используется в нем, описывает хэш-функциюможет это то что ты хочешь?

/**
     * Applies a supplemental hash function to a given hashCode, which
     * defends against poor quality hash functions.  This is critical
     * because HashMap uses power-of-two length hash tables, that
     * otherwise encounter collisions for hashCodes that do not differ
     * in lower bits. Note: Null keys always map to hash 0, thus index 0.
     */
    static int hash(int h) {
        // This function ensures that hashCodes that differ only by
        // constant multiples at each bit position have a bounded
        // number of collisions (approximately 8 at default load factor).
        h ^= (h >>> 20) ^ (h >>> 12);
        return h ^ (h >>> 7) ^ (h >>> 4);
    }
2 голосов
/ 26 мая 2011

Начните с Javadoc , а затем переходите к источнику, если это необходимо!

1 голос
/ 26 мая 2011

Нет.Документация API определяет внешнее поведение классов коллекции, но не детали реализации, которые, вероятно, зависят от поставщика.Если вы хотите узнать, как классы реализованы в конкретной виртуальной машине, у вас нет другого выбора, кроме как проверить исходный код.

По крайней мере, AFAIK, реализация Java API не реализована с дополнительной документацией для таких конкретных деталей.

1 голос
/ 26 мая 2011

Вы можете использовать документацию по коллекциям: http://download.oracle.com/javase/tutorial/collections/index.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...