В рамках текущего проекта класса нам было предложено использовать Карты для лучшего связывания объектов.Поиск Java HashMap
Короче говоря, в настоящее время мы имеем четыре ArrayLists, которые держат объекты на
// Array Lists used for sorting.
private static ArrayList<Party> partyList = new ArrayList<Party>();
private static ArrayList<Creature> creatureList = new ArrayList<Creature>();
private static ArrayList<Treasure> treasureList = new ArrayList<Treasure>();
private static ArrayList<Artifact> artifactList = new ArrayList<Artifact>();
Каждый класс имеет свои собственные поля (то есть, партия имеет «индекс», «имя», Существо имеет «индекс», «имя» , «возраст», высота», и т.д ... но они все имеют уникальный индекс)
на этой неделе мы должны реализовать HashMaps, где ключ объекта, является его индекс.
так , в качестве примера:
creatureMap.put(creature.index, creature)
...
Наша программа также позволяет осуществлять поиск. Поэтому я понимаю, что теперь, когда мы ищем по индексу, мы просто просматриваем соответствующий хэш-файл для нужного нам индекса и работаем с объектом, который является его значением.
Однако наша программа также позволяет пользователю искать по имени, высоте, весу и т. Д. Итак, как эффективно использовать хэшмапы здесь, если это помогает только при поиске по индексу? Что произойдет, если я хочу искать существа по имени? Мне нужно было бы перебрать все значения в хэш-карте, посмотреть на поле «имя». Именно это я и делаю с арраистом.
Наш профессор сказал это, когда кто-то задал подобный вопрос:
Идея заключается в том, что в первом проекте, простой подход к вставки все элементы в списки массива и когда один необходимо связать существо к партии или предмет к существу, нужно было бы искать линейку ArrayList до тех пор, пока не будет найден индекс элемента. Это операция O (n), если ArrayList не сортируется, и операция O (log n) , если список сортируется, но сортировка, как правило, O (n * n) или O (n log n) в зависимости в используемой операции сортировки.
На этой неделе я прошу вас внедрить систему поиска O (1), основанную на , на структуру данных карты. Таким образом, мы должны использовать индекс элемента как его ключ для генерации ссылок. Это используется один раз при обработке входного файла .
Таким образом, я не уверен, что правильно понимаю концепцию карт/ключей-значений.
Действительно ,входной файл содержит строки, из которых мы создаем наши объекты. например (p: 001: воины выходного дня), эта строка говорит нам о создании партийного объекта, его индекс - 001, а его имя - выходцы воинов. Точно так же существо будет таким, но у него также будет другой индекс, к которому он принадлежит. (C: 250: conan: 001) – sqram
Вправо. Таким образом, со списком версии кода вам нужно перебирать список, чтобы найти партию № 001, что делает ваш код чтения файла относительно медленным (когда у вас есть много сторон, чтобы пройти через). Версия карты ускорит чтение файла, выполнив поиск по индексу [O (1)] вместо итеративного поиска [O (n)]. – Tim
Спасибо. Хотел бы я принять два ответа = | – sqram