![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
druff |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 24.10.2007 Репутация: нет Всего: нет |
Добрый день!
Уже несколько дней читаю разные книги по коллекциям, в принципе большинство информации понятно, но нужен совет по реализации классов. Предположим в субд есть две таблицы, с уникальным набором полей: ТАРИФ (два поля: дата изменения и значение. первичные ключи я опустил, потому что они к делу не относятся) и, скажем, НОРМА (тоже два поля: дата изменения и значение). Необходимо подгрузить эти таблицы в память в виде объектов. Т.е. тоже должно получится два списка, и здесь я не знаю: 1) Что лучше выбрать: хранить дату в качестве ключа, а сам объект будет содержать только значение или же сделать объект с теми же полями из таблицы? В процессе жизни программы в эти списки могут добавляться новые объекты и нужно будет их сортировать заново. В этих списках мне нужен поиск по дате. 2) Из этих двух объектов желательно сформировать ещё один список который должен содержать уникальный набор (дата, значениеТАРИФА, значениеНОРМЫ). Как это лучше реализовать? так же как в пункте 1? работа с этими коллекциями может совершаться достаточно часто, поэтому скорость работы важна Это сообщение отредактировал(а) druff - 22.1.2008, 16:12 |
|||
|
||||
nornad |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1079 Регистрация: 16.2.2007 Где: в Караганде Репутация: 16 Всего: 31 |
Учитывая возможности расширения списка полей - Map. Ключом делаешь объект, содержащий три поля (дата, тариф и норма). И используешь Set, т.к. даже при добавлении новых полей в объект ключа у тебя не появится необходимость хранить данные. А вот если думаешь, что может появиться - тогда Map. Но я бы всё же сделал Set, а уж когда потребуется - заменил бы на Map. Добавлено через 1 минуту и 4 секунды
Имхо, тут важнее правильное построение кода, а скорость вряд ли будет различаться кардинально. -------------------- Три достоинства программиста: Леность, Нетерпение и Гордость Ларри Уолл |
|||
|
||||
druff |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 24.10.2007 Репутация: нет Всего: нет |
Не уверен, что правильно понял то, что понимается под термином "ключ" применительно к Set. Можешь пояснить? |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
в основе Set и Map лежит массив Object[]. В обоих случаях при добавлении используется обьект key (ключ) - put(key) для Set или put(key, value) для Map. В Set в массиве сохраняется ссылка на key, в Map - ссылка на обьект value. А индекс, куда положить ссылку, вычисляется по хешкоду обьекта key.
|
|||
|
||||
druff |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 24.10.2007 Репутация: нет Всего: нет |
Упс. Значит это я недопонял документацию.
Я посчитал, что реализовав интерфейс Comparable в своём классе из двух полей (дата и значение) смогу сделать поиск в коллекции своих объектов по дате. Однако тот же binarySearch всё равно требует в качестве параметра объект, а дату брать отказывается :( Значит поиск нужно реализовывать самому? |
|||
|
||||
druff |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 24.10.2007 Репутация: нет Всего: нет |
Или же можно создать фиктивный объект, присвоить ему нужную дату и делать поиск по этому объекту?
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
На самом деле можешь, просто надо сделать типа такого:
хотя это и будет нарушением контракта. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
druff |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 24.10.2007 Репутация: нет Всего: нет |
Попробовал сделать как в примере - всё равно не даёт. В binarySearch всё же можно скармливать ключ только того же типа, что и элементы в коллекции. Зато с фиктивным объектом всё получилось и заработало.
Если вначале склонялся к Set или Map, то сейчас выяснил, что средств поиска у них вообще нет (только переводить в массив). Поэтому буду работать с List |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Уж не знаю, что ты пробовал:
Выдаёт 1 как и ожидалось. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
druff |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 24.10.2007 Репутация: нет Всего: нет |
О, действительно
если создавать список как
то на binarySearch с поиском по дате выдаёт ошибку, а если
то ошибки нет Это сообщение отредактировал(а) druff - 24.1.2008, 17:31 |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А нет, ошибка все таки есть, но она в другом:
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |