Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
1

Массив явы

27.10.2013, 21:16. Просмотров 529. Ответов 10
Метки нет (Все метки)

Нужно создать массив и запутался с "подходом"...

В Делфи была возможность создать массив "составного" типа (несколько РАЗНЫХ типов):
Pascal
1
2
3
4
5
var
a1: array [0..50] of record
        var1: integer;
        var2: String;
end;
Мне нужно нечто подобное на яве и не знаю как это сделать... Помогите пожалуйста!

Нужен быстрый поиск по статическому индексу и перебор значений (поиск одного значения по другому).

Масив - статичный - количество элементов фиксировано. Создавать несколько параллельных массиво не хочется (если есть другой вариант).
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.10.2013, 21:16
Ответы с готовыми решениями:

Перевод кода с явы на андроид
Я делаю игру под андроид,и мне надо,чтобы пакмен двигался вверх,вниз,вправо...

Ошибка явы
помогите разодраться с ошибкой

Перевести с явы на c++ Builder
int *output; int *outputsmaller; int width, height; // ...... ...

Как посылать письма из Явы?
Надо мне написать прогу на Яве, запускаемую на почтовом сервере, которая бы при...

Атол, обход номенклатуры средствами Явы
Всем здрасте, возникла необходимость выгрузить справочник Номенклатуры с...

10
Kiryna
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 11
27.10.2013, 21:39 2
Эм, ну вообще говоря можно создать массив объектов типа Object (либо любого другого предка), но в дальнейшем Вы сможете использовать методы только этого самого предка, либо нужно будет приводить тип, а если у Вас скажем объект String, а Вы его попробуете кастануть, скажем, в Integer, то будет ClassCastException. И далее, непонятно что и с чем Вы будете потом сравнивать, т.к. используя объекты, а Вам нужно будет использовать даже обертки для примитивных типов, т.к. у Вас массив типа Object, Вы уже не сможете использовать "==" или ">". В Вашем случае, если я его правильно понимаю, стоит рассмотреть другой подход.
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
27.10.2013, 21:50  [ТС] 3
Мне нужно ВРУЧНУЮ определить значения таблицы примерно так

public static String DBTables[][] = {
{"Таблица 1", "Table1", 4234, false},
{"Таблица 2", "Table2", 302, true},
...
}

Массив - большой! Около 100 записей.

А потом хочу сделать вспомогательные фукнции - найти по рускому названию английское, узнать активность (логическое) таблицы, таблица в списке, руское название по числовому коду...

Причем сделать это МАКСИМАЛЬНО быстро. Насколько я понимаю "сложность" ArrayList (минимум) раза в 3 выше. Для каждой записи создаются классы в памяти, они могут быть "разбросаны" по памяти а не едином блоке указаном еще на стадии компиляции... Программа и так тормозит. Раньше справлялся константами, но начал путаться. Не хочу что-бы тормоза еще СИЛЬНО выросли за счет таблицы.
0
Kiryna
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 11
27.10.2013, 22:10 4
1. ArrayList там ни при чём, Вы можете использовать обычный массив для объектов любого класса/интерфейса, но они должны быть либо экземплярами это класса, либо его потомками, либо реализовывать этот интерфейс.
2. Возможно стоит реструктуризовать информацию, скажем создать класс TableInfo с полями mTableNameRu = "Таблица1", mTableNameEn = "Table 1" и т.д., и их уже запихать в массив TableInfo[]. Или сделать отдельно массив для названий "Таблица 1", "Таблица 2", отдельно для false, true в порядке таблиц из первого массива, может использовать Map для соответствия названия числовому коду и т.д. В общем, там уже смотрите по ситуации
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
27.10.2013, 22:33  [ТС] 5
У меня проблема с:
1) БЫСТРЫМ и удобным добавлением элементов таблицы
2) жестким контролем соответсвия Таблица1 к Table 1. Если я создам несколько таблиц - легко ошибиться при заполнении и забыть кого-нибудь добавить - получу смещение!

public static String DBTables1[] = {
"Таблица 1",
"Таблица 2",
"Таблица 3",
"Таблица 4",
...
}

public static String DBTables[][] = {
"Table1",
"Table2",
"Table4",
...
}
и начнутся БОЛЬШИЕ проблемы.
Цитата Сообщение от Kiryna Посмотреть сообщение
Возможно стоит реструктуризовать информацию, скажем создать класс TableInfo
Можно, но классы надо СОЗДАВАТЬ - это займет драгоценные секунды при открытии программы. И вместо одной секунды она будет открываться (допустим) 5... Пока заполнит 100-500 записей... Или нет?
0
Kiryna
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 11
27.10.2013, 22:57 6
Я, скорее всего, не вполне понимаю, что Вы пытаетесь сделать. У Вас есть 100 таблиц (что за таблицы, база данных?), Вы путаетесь в их названиях и поэтому решили создать массив, в котором всё это будет вместе? Может стоит создать таблицу таблиц, и работать с ней; посмотреть в сторону Cursor. Т.е. например, английские названия таблицы пусть хранятся в массиве в ресурсах (для русских, если нужно, можно тоже создать соответствующий массив в русских ресурсах), а вся остальная инфа пусть хранится в отдельной таблице, которую Вам не нужно будет создавать всякий раз при открытии программы. Еще посмотрите SharedPreferences, может тоже подойдет для Ваших целей
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
28.10.2013, 00:00  [ТС] 7
Цитата Сообщение от Kiryna Посмотреть сообщение
Вас есть 100 таблиц (что за таблицы, база данных?), Вы путаетесь в их названиях и поэтому решили создать массив, в котором всё это будет вместе?
УГУ! Что-то вроде! Таблиц много. Путаюсь. Иногда меняю название таблицы и приходится перебирать все SQL запросы по работе с этой таблицей. Раньше использовал константы с названиями. Но захотел еще и помнить дополнительные реквизиты каждой таблицы. Например текст для вывода в заголовок списков и право редактировать эту таблицу.
Все значения задаются ОДИН раз еще на стадии компиляции. Нужные ТОЛЬКО мне. Меняться в режиме работы не должны!
Таблицу таблиц прямо в базе создавать не хочу. Во первых база создается "на лету" (если программа ее не обнаруживает). А во вторых каждый раз выполнять запрос что-бы получить название таблицы для следующего запроса - это слишком сложно.
Хочу простой МАССИВ! Пока что (за прошлые 2 часа) сделал ВСЕ поля текстовыми и вынужден их преобразовывать "на лету" ("1" = true, "123" = 123). А можно ли это обойти? Чтобы ОДНОВРЕМЕННО хранить в ОДНОМ массиве СТАТИЧЕСКИЕ данные РАЗНЫХ типов?
как (я уже показывал) здесь:
Java
1
2
3
4
5
public static String DBTables[][] = {
{"Таблица 1", "Table1", 4234, false},
{"Таблица 2", "Table2", 302, true},
...
}
0
Kiryna
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 11
28.10.2013, 00:35 8
Смотрите, в массиве хранятся объекты одного типа, который Вы указываете при создании. Вам может оказаться полезным ContentProvider с CursorLoader, для ContentProvider, как правило, создается ContractClass, в котором описываются Ваши таблицы.

Сам контракт класс состоит из внутренних интерфейсов, которые описывают наборы заголовок столбцов, далее идут классы, которые реализуют эти интерфейсы в нужных комбинациях, собственно описывая таблицы, в них можно добавить индивидуальные константы для каких-то столбцов, собственно название таблицы, MIME типы и какие-то методы, которые Вы посчитаете нужным туда добавить: простой пример от гугла, сложный пример от гугла

Далее, в ContentProvider, реализуете методы, для работы с базой: query(), update(), delete(), insert() и т.д. Везде в запросах используете имена таблиц и столбцов из контракт класса, т.е. всё хранится централизовано, нужно поменять - меняете в значение константы в контракт классе и всё. Для работы с базой используете CursorLoader, который наследует AsyncTaskLoader и выполняется не в UI-потоке (может программа будет меньше тормозить)

Единственное, что смущает, что у Вас 100 таблиц, может как-то пересмотреть базу, что-то объединить, или наоборот создать несколько контент провайдеров, в общем дальше уже смотрите сами
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
28.10.2013, 01:32  [ТС] 9
Я понял Вашу идею, но увы это не совсем то что мне нужно! Реально у меня сейчас 24 таблицы, но количество растет(раслаиваются по смыслу, создаются подчиненные, 2 таблицы "раскладываются" в 3). Поэтому часто приходится перетряхивать имена таблиц. У меня сейчас уже около 8 "провайдеров". Причем на ОЧЕНЬ переплетеные между таблицами запросы(LEFT JOIN). Упростить не получается - пишу "справочник". И надоело рисовать на бумажке схемы документов, зависимости, доступы и вручную править каждый запрос. Хочу сделать некую простую структуру таблиц и взаимосвязей. И что-бы одним "кликом" на стадии компиляции мог заблокировать или заменить таблицу...

Пожалуй пока останусь на своем масиве... Просто хотел упростить себе работу с МАСИВОМ (как в Делфи).

Pascal
1
2
3
4
5
6
7
8
9
10
var
a1: array [0..50] of record
        var1: integer;
        var2: String;
        var3: Boolean;
end;
 
if (a1[23].var1 = 4) then...
if (a1[23].var2 = "table5") then...
if (a1[23].var3) then...
0
Gabberr
104 / 104 / 19
Регистрация: 13.10.2009
Сообщений: 404
28.10.2013, 11:47 10
почему бы не создать класс с нужными полями
Java
1
2
3
4
5
class Table{
    int var1;
    String var2;
    boolean var3;
}
и массив элементов этого класса

Java
1
Table[] tables = new Table[10];
1
V0v1k
1160 / 984 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
28.10.2013, 14:25 11
Как уже говорилось, можете использовать
Java
1
2
3
4
5
public static Object DBTables[][] = {
                {"Таблица 1", "Table1", 4234, false},
                {"Таблица 2", "Table2", 302, true},
        
        };
если уж классы создавать категорически отказываетесь.
2
28.10.2013, 14:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2013, 14:25

Обновлены аплеты для явы и самтайма
Download re-signed Java applets for Lotus Domino (May 18, 2009) Abstract...

Как с помощью Явы сделать установку домашней страницы
НУжно по нажатию на ссылку, чтобы страница устанавливалась как домашняя

Есть ли в визуал бейсике в Аспе функция аналогичная alert из явы?
И какая, если есть?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru