Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
Tester64
396 / 357 / 43
Регистрация: 22.05.2013
Сообщений: 2,518
#1

Массив явы - Программирование Android

27.10.2013, 21:16. Просмотров 510. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Массив явы (Программирование Android):

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

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

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

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

Атол, обход номенклатуры средствами Явы - Java
Всем здрасте, возникла необходимость выгрузить справочник Номенклатуры с Фронтола (Атол РМК) в табличку любую, dbf желательно или csv. На...

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

10
Kiryna
0 / 0 / 0
Регистрация: 26.10.2013
Сообщений: 11
27.10.2013, 21:39 #2
Эм, ну вообще говоря можно создать массив объектов типа Object (либо любого другого предка), но в дальнейшем Вы сможете использовать методы только этого самого предка, либо нужно будет приводить тип, а если у Вас скажем объект String, а Вы его попробуете кастануть, скажем, в Integer, то будет ClassCastException. И далее, непонятно что и с чем Вы будете потом сравнивать, т.к. используя объекты, а Вам нужно будет использовать даже обертки для примитивных типов, т.к. у Вас массив типа Object, Вы уже не сможете использовать "==" или ">". В Вашем случае, если я его правильно понимаю, стоит рассмотреть другой подход.
0
Tester64
396 / 357 / 43
Регистрация: 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 / 43
Регистрация: 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 / 43
Регистрация: 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 / 43
Регистрация: 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
102 / 102 / 17
Регистрация: 13.10.2009
Сообщений: 403
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
1159 / 983 / 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
Привет! Вот еще темы с ответами:

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

Ps.newby изучил основы Явы(пара само учителей и самописные хелловорлды) - Java SE
К чему переходить дальше. Свою область выбрал хочу писать игры. Напишите план развернутый что мне делать дальше, что изучать, что качать, в...

Можно ли сделать вывод отдельного елемента PHP и явы на всех страницах ? - PHP
Добрый день. Есть форма отправки сообщений которая работает на библиотеке JQuery выводится скриптом. Есть PHP код который думает за эту...

Вызов функции визуал бейсика из функции явы скрипта - C# ASP.NET
Как такое соорудить, есть например две наипростецкие функции: <% function base() h11='123' base = h11 end function %> ...


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

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

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