Я пытаюсь создать класс, который реализует интерфейс карты. Поэтому я пишу код, который будет проверять, является ли вызывающий объект пустым или нет. Однако я немного запутался в отношении того, какую структуру данных я должен использовать внутри страны. В настоящее время я использую Hash Table. Заранее спасибоJava: Внутренняя структура данных в Map
ответ
От Wikipedia,
Ассоциативные массивы обычно используются , когда поиск является наиболее частой операции. По этой причине, реализации, как правило, разработаны, чтобы позволить быстрый поиск, за счет более медленного вставки и больший след хранения данных по сравнению с другими структуры (такие как ассоциации списков).
Эффективные представления:
Там два основных эффективных данных структуры, используемые для представления ассоциативные массивы, хэш-таблицу и самостоятельно балансировки двоичного дерева поиска (такие как красно-черного дерева или AVL дерево). Списки пропусков также являются альтернативой , хотя относительно новые и не так широко используются. Также могут использоваться B-деревья (и ) и , которые обычно используются, когда ассоциативный массив слишком велик, чтобы полностью хранить в памяти, например, в простой базе данных . Относительные преимущества и недостатков включают в себя:
Асимптотической эффективность операции: Хэш таблица имеет быстрее средний поиск и вставок времени, O (1), по сравнению с & thetas бинарного дерева (Log п), в то время как сбалансированные деревья имеют более быстрый наихудший поиск и время вставки, O (log n) по сравнению с Θ (n). Пропущенные списки имеют наихудший вариант O (n) и O (log n), но с меньшим количеством вставки и удаления Накладные расходы на практике, чем сбалансированные Бинарные деревья.
заказа консервирования: Сбалансированная бинарные деревья и пропустить списки сохраняют порядок - позволяющий эффективно итерация по клавишам, чтобы или эффективно найти ассоциацию , ключ является ближайшим к заданному значению. Таблицы хэшей не сохраняют порядок и поэтому не могут выполнять эти операции так же эффективно (они требуют сортировки данных в отдельном шаге ).
Диапазон запросов: Сбалансированные бинарные деревья могут быть легко адаптированы к эффективно присвоить одно значение для большого упорядоченного диапазона ключей, или подсчитать количество ключей в упорядоченном диапазоне. (С n элементами в массиве и выполнением операции в диапазоне смежных диапазонов ключей m, сбалансированное двоичное дерево будет принимать время O (log (n) + m) , тогда как для хэш-таблицы потребуется Θ (n) время как он должен искать всю таблицу)
распределение поведение:. Хэш-таблицы с открытой адресации хранить все данные в большой непрерывный блок памяти , что перераспределяется нечасто, в то время как распределение деревьев выполнять многие небольшие , частые распределения. В качестве хеш-таблицы результатов могут быть трудными для выделить в фрагментированной куче, а наоборот деревья могут вызвать фрагментацию кучи . Деревья также являются более уязвимыми для неэффективности в распределительных устройствах .
Компактность. Хэш-таблицы могут иметь более компактное хранилище для малого значения типов, особенно если значения равны бит.
Стойкость: Существуют простые постоянные версии сбалансированных двоичных деревьев, которые особенно заметны в функциональных языках.
Поддержка новых типов ключей: Построение хеш-таблицы требует разумного хэш-функции для типа ключа, который может быть трудно писать хорошо, в то время как сбалансированные бинарные деревья и пропустить списки требуется только общий порядок на ключей.
Иногда простые реализации структур данных один или других имеют недостатки, которые могут быть преодолены с помощью лучшего дизайна. Например:
хэша-таблица, которые используют ненадежный ввод как ключи могут быть уязвимы для отказа в обслуживании атаки, при которых ненадежных данные принадлежностях пользователя, предназначенных для генерации большого количества столкновений. Это может быть преодолено выбором хеш-функций от универсальным семейством или путем хеширования ненадежного ввода с криптографической функцией перед вставкой.
Простые сбалансированные деревья не занимают места на указателях и распределении метаданные; эти проблемы могут быть смягчены путем хранения нескольких элементов в каждом узле и с использованием пулов памяти .
В дополнение к самой таблице вы также можете поддерживать целочисленную переменную-член, чтобы отслеживать размер коллекции, увеличивая ее каждый раз при каждом новом сопоставлении и уменьшая каждый раз при удалении. Таким образом, вы можете упростить методы интерфейса size
и isEmpty
:
public int size() {
return this.size;
}
public boolean isEmpty() {
return this.size == 0;
}
Я пробовал разные методы, но в конечном итоге расширяя некоторую структуру данных, которая сама была настолько сильна, что никаких навыков кодирования не нужны были для него. Поэтому я решил использовать обычные строковые массивы (2) из виртуальной хэш-карты, такой как структура, которая расширялась по мере увеличения потребности в пространстве.
Ниже приведена ссылка на полный код.
http://code.google.com/p/rohan-oopconcept-assignment/source/browse/trunk/src/EmployeeMap.java
- 1. C# Hashtable Внутренняя структура данных
- 2. Структура данных для roguelike map
- 3. Внутренняя структура кластерного индекса
- 4. Внутренняя структура SentiWordNet 3
- 5. Внутренняя структура класса
- 6. Внутренняя структура файла PDF
- 7. Внутренняя файловая структура Numpy * .npz
- 8. Как Java List и Map Object Внутренняя структура сохраняется внутри Aerospike?
- 9. Swift Flat Map Структура данных словаря
- 10. std :: map - какая структура данных находится внутри
- 11. Структура данных java коллекции
- 12. Структура сортировки данных Java
- 13. Java - конкретная структура данных
- 14. Структура данных дерева Java?
- 15. Структура данных Brushup (Java)
- 16. Java: Структура данных Память
- 17. Структура данных параллелизма Java
- 18. Структура данных дерева Java
- 19. Java структура данных вопрос
- 20. Структура данных дерева Java
- 21. Java какая структура данных?
- 22. Эквивалентная структура данных в Java?
- 23. Сортировка структура данных в Java
- 24. Структура данных LinkedList в Java
- 25. Какова внутренняя структура ярлыка Windows?
- 26. SVN - тег \ Ветки Внутренняя структура
- 27. C# внутренняя структура без новых
- 28. Структура Map ObjectFactory.GetAllInstances Область
- 29. map a Структура сайта
- 30. Внутренняя реализация структур данных в java?