powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно создать и считать коллекцию?
43 сообщений из 43, показаны все 2 страниц
Как правильно создать и считать коллекцию?
    #37675017
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем Доброго вечера!

Спарсиваю xml в коллекцию и потом в рамках одной транзакции загоняю всё в базу данных .
Вопрос как правильно сделать коллекцию для моего случая?
Данные имеют вид:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
<Response>
 <TT>
  <Item A="..." B="..." C="..." ... />
  <Item A="..." B="..." C="..." ... />
  <Item A="..." B="..." C="..." ... />
  ...
 </T>
</Response>

Может мне создать отдельный класс и коллекцию обьектов этого класса например так:
Код: java
1.
2.
3.
4.
5.
6.
7.
public class TT {
	public String a;
	public String b;
	public String c;
}
//и потом:
private List<TT> TT;

но тогда как правильно заполнить в моём цикле эту коллецию TT ?
Код: java
1.
2.
3.
while (ap.evalXPath() != -1) {
???
}

и как потом её считать в цикле?
Код: java
1.
2.
3.
for (int i = 0; i < TT.size(); i++) {
???
}

Или лучше использовать ArrayList или HashTable или ... ?
Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675051
regal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может лучше

public class TT {
Map Item = new HashMap(); //и сюда уже класть ваши айтемы и по ключу(АБС) потом доставать или через итератор
}
//и потом:
private List<TT> TT
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675053
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понял, что у вас не получается.

Начинаете парсить, создаете объект тт, создаете пустой list, пока есть айтемы, вычитываете их по одному, создаете объект айтем, добавляете в list. Собственно и все
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675060
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А обязательно объекты делать? Можно через SAX или Digester написал классы, которые будут формировать запрос и отправлять.
А что за база? Для некоторых есть нормальные тулзы XML импорта.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675081
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, тут Java не нужна? Преобразовываем XML в SQL и выполняем консольной тулзой от сервера.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675084
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
регвырами разобрать. Будет быстро и просто.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675087
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне надо понять как в цикле while заполнять свойства (a, b, c) для каждого элемента моей колекции tt ?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
class TT {
	public String a;
	public String b;
	public String c;
}
...
private List<TT> tt;
...
int val=0;
while (ap.evalXPath() != -1) {
	val = vn.getAttrVal("A");
	if (val != -1) tt(???).add(TT.a=vn.toNormalizedString(val)); //vn.toNormalizedString(val) - выдаёт String

        val = vn.getAttrVal("B");
	if (val != -1) tt(???).add(TT.b=vn.toNormalizedString(val));

        val = vn.getAttrVal("C");
	if (val != -1) tt(???).add(TT.c=vn.toNormalizedString(val));
					
}



Ну а считывать я буду так
Код: java
1.
2.
3.
4.
5.
for (int i = 0; i < tt.size(); i++) {
tt.get(i).a;
tt.get(i).b;
tt.get(i).c;
}



Подскажите как заполнить коллекцию?
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675103
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidv регвырами разобрать. Будет быстро и просто.
У вас есть проблема. Вы решили что регулярное выражение лучше всего подходит для её разрешения. Теперь у вас две проблемы.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675104
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты точно не стебешься?
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675107
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class TT {
	public String a;
	public String b;
	public String c;
}
...
private List<TT> tt;
...
int val=0;
while (ap.evalXPath() != -1) {
        TT item = new TT();
	val = vn.getAttrVal("A");
	if (val != -1) TT.a=vn.toNormalizedString(val)); 

        val = vn.getAttrVal("B");
	if (val != -1) TT.b=vn.toNormalizedString(val));

        val = vn.getAttrVal("C");
	if (val != -1) TT.c=vn.toNormalizedString(val));
	tt.add(item);				
}



Такой говнокод не устраивает?
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675109
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сорри, вот этот говнокод более правильный
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
class TT {
	public String a;
	public String b;
	public String c;
}
...
private List<TT> tt;
...
int val=0;
while (ap.evalXPath() != -1) {
        TT item = new TT();
	val = vn.getAttrVal("A");
	if (val != -1) item.a=vn.toNormalizedString(val)); 

        val = vn.getAttrVal("B");
	if (val != -1) item.b=vn.toNormalizedString(val));

        val = vn.getAttrVal("C");
	if (val != -1) item.c=vn.toNormalizedString(val));
	tt.add(item);				
}
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675159
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,

Только ещё я забыл инициализировать колекцию:
Код: java
1.
List<TT> tt = new ArrayList<TT>();

БОЛЬШОЕ СПАСИБО, то, что и искал !!!

Относительно SAX, регулярных выражений, ...:
я сначала использовал библиотеку SimpleXML (т.е. SAX), но спросив совета перешёл на VTD-XML.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675162
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Android, XML, база данных. Жесть.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675438
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я конечно может чего и не понимаю, но зачем нужны коллекции для redskyСпарсиваю xml и потом в рамках одной транзакции загоняю всё в базу данных.
Я делал ту же самую задачу для андроида так, как писали старшие товарищи выше через SAX парсер.
Никаких коллекций вам не понадобиться, транзакция то одна, что мешает извлеченные данные сразу вставлять в БД? Экономия памяти+ скорость выполнения.
ЗЫ. IMHO быстрее sax парсера ничего нет.Парсил 30мб файл на андроиде с записью в БД. Действие заняло ~2 мин.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675445
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А просветите, пожалуйста, что за злобные буратины шлют XML на мобилку? Тормозной формат неприспособленый ни для быстрого чтения, ни для быстрой передачи. Откуда он на мобиле берется?
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675514
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditЯ конечно может чего и не понимаю, но зачем нужны коллекции для redskyСпарсиваю xml и потом в рамках одной транзакции загоняю всё в базу данных.
Я делал ту же самую задачу для андроида так, как писали старшие товарищи выше через SAX парсер.
Никаких коллекций вам не понадобиться, транзакция то одна, что мешает извлеченные данные сразу вставлять в БД? Экономия памяти+ скорость выполнения.
ЗЫ. IMHO быстрее sax парсера ничего нет.Парсил 30мб файл на андроиде с записью в БД. Действие заняло ~2 мин.1. Коллекция нужна была мне для разделения спарсивания и записи в БД. Мне надо было увидеть время выполнения и того и другого.
2. Время после выделения в коллекцию как было 1,5-2 сек. так и осталось (на парсинг + запись в БД)
3. Относительно скорости:
- из описания SimpleXML "Developing XML configuration and communication systems can be done much quicker than through the use of XML frameworks such as DOM, SAX, and even other frameworks such as Digester and XStream."
- сравнительные тесты скорости: тут
- и в моём случае прирост в 4 раза
4. У меня файл размером в 700Kb., т.е. в памяти он занимал приблизительно столько же и ради прироста скорости и поменял парсер. Если бы файл был 30 метров, конечно бы отказался от этой затеи.
BlazkowiczА просветите, пожалуйста, что за злобные буратины шлют XML на мобилку? Тормозной формат неприспособленый ни для быстрого чтения, ни для быстрой передачи. Откуда он на мобиле берется? Бывают вот такие злобные разработчики ))
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675529
OOsalivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redsky,
Можно использовать jaxb входит в состав jdk начиная с 5 - автоматически преобразует xml в объект
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675533
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OOsalivanredsky,
Можно использовать jaxb входит в состав jdk начиная с 5 - автоматически преобразует xml в объект
ТС упустил такую маааленькую деталь, как android . Хорошо хоть не j2me
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675534
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OOsalivanredsky,
Можно использовать jaxb входит в состав jdk начиная с 5 - автоматически преобразует xml в объект С http://stackoverflow.com "... JAXB isn't included in android by default and the library will cost you 9(!) MB of your apk. Try SimpleXML instead. It has similiar abilities and much more lightweight."
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675861
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczрА просветите, пожалуйста, что за злобные буратины шлют XML на мобилку? А что плохого в стандарте w3c?
2redsky
А что мешает воспользоваться тогда теплым ламповым stax от android?
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675908
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczLeonidv регвырами разобрать. Будет быстро и просто.
У вас есть проблема. Вы решили что регулярное выражение лучше всего подходит для её разрешения. Теперь у вас две проблемы.
Цитата известна.

Поясните, почему использование xml-парсера для решения данной конкретной задачи лучше, чем регулярные выражения?
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37675934
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditА что плохого в стандарте w3c?
Он ресурсоёмкий и избыточный.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677446
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
BlazkowiczОн ресурсоёмкий и избыточный.
А какая разумная альтернатива для таких задач?
Собственные велосипеды писать? XML устоявшийся стандарт, в котором можно описать любую структуру, проверить корректность данных и плюс наличие множества библиотек по обработке xml заставляет меня остановить свой выбор именно на нем.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677458
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditА какая разумная альтернатива для таких задач?
Собственные велосипеды писать? XML устоявшийся стандарт, в котором можно описать любую структуру, проверить корректность данных и плюс наличие множества библиотек по обработке xml заставляет меня остановить свой выбор именно на нем.
http://www.4feets.com/2009/08/serializing-data-json-vs-protocol-buffers/
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677465
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
redsky- и в моём случае прирост в 4 раза
4. У меня файл размером в 700Kb., т.е. в памяти он занимал приблизительно столько же и ради прироста скорости и поменял парсер. Если бы файл был 30 метров, конечно бы отказался от этой затеи.
В данном примере вы не использовали sax,соответственно сравнение неуместно. То , что DOM тормозной и прожорливый-это не секрет.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677468
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvПоясните, почему использование xml-парсера для решения данной конкретной задачи лучше, чем регулярные выражения?
Вы можете написать регулярное выражение, которое разберет XML в один проход? Хотя бы в черновом варианте свою идею продемонстрируйте. Закрывающие теги чем определять?
А если XML без переноса строк?
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677488
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для андроида рекомендуемый формат обмена данными json. а дальше как хотите. если очень хочется, можно и soap/xml гонять.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677508
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
з.ы. про Protocol Buffers не знал, надо пощупать.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677518
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trogloditredsky- и в моём случае прирост в 4 раза
4. У меня файл размером в 700Kb., т.е. в памяти он занимал приблизительно столько же и ради прироста скорости и поменял парсер. Если бы файл был 30 метров, конечно бы отказался от этой затеи.
В данном примере вы не использовали sax,соответственно сравнение неуместно. То , что DOM тормозной и прожорливый-это не секрет.Как я понял Simple XML использует подход SAXa. DOM я не использовал. VTD - не DOM, хоть память и юзает. А потратить 600Kb памяти ради такого прироста стоят того.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677523
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczВы можете написать регулярное выражение, которое разберет XML в один проход? Хотя бы в черновом варианте свою идею продемонстрируйте. Закрывающие теги чем определять?
А если XML без переноса строк?
Зачем в этой задаче определять закрывающие тэги? Я бы относился к файлу просто как к файлу заданной структуры.
Код: java
1.
  <Item A="(.*?)" B="(.*?)" C="(.*?)" />


И вперед по тексту find делать. С правильными флагами переносы строк и прочее будут несущественными.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677568
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Blazkowicz
Я согласен, что JSON более экономичен в размере, но если запаковать в архив, эта разница нивелируется.
Вот, что я нашел у IBM
Хотя разбор JSON гораздо проще с точки зрения программирования, это дается не даром. Добавляется память, в которую до начала обработки считывается весь поток данных и где затем хранятся все данные. Подход же SAX XML использует только те данные, который действительно представляют интерес. Это не важно, если памяти для разбора объекта JSON много; в этом случае данный подход может быть предпочтительным для многих приложений, особенно если не нужно работать с DOM.
Т.е. держать весь объем в памяти (особенно если он несколько десятков мегабайт) IMHO недопустимо, если ресурсы ограничены, плюс xml-тип присутствует во многих СУБД, что позволяет обратывать данные нативно в ХП.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677605
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Troglodit
у чувака андроид. откуда возьмутся объекты подлежащие сериализации размером в десятки!!! мегабайт?
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677695
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonidv
Код: java
1.
  <Item A="(.*?)" B="(.*?)" C="(.*?)" />



И кто гарантирует порядок атрибутов?
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677700
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TrogloditЯ согласен, что JSON более экономичен в размере, но если запаковать в архив, эта разница нивелируется.

Не только в размере, но и в нагрузке при сериализации.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677727
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczLeonidv
Код: java
1.
  <Item A="(.*?)" B="(.*?)" C="(.*?)" />



И кто гарантирует порядок атрибутов?
Тот кто формирует файл (я так понял, что это автор и есть)? Можно решать абстрактные задачи, а можно конкретные. Если порядок атрибутов не гарантируется, то справимся 2 другими регвырами.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677729
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Двумя не справимся. Тремя.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677731
Leonidv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И тремя тоже. Хотя можно и двумя тогда.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677738
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LeonidvBlazkowiczпропущено...

И кто гарантирует порядок атрибутов?
Тот кто формирует файл (я так понял, что это автор и есть)? Можно решать абстрактные задачи, а можно конкретные. Если порядок атрибутов не гарантируется, то справимся 2 другими регвырами.Нет. Не я.
BlazkowiczTrogloditЯ согласен, что JSON более экономичен в размере, но если запаковать в архив, эта разница нивелируется.

Не только в размере, но и в нагрузке при сериализации. В заключении статьи на сайте IBM сказано: "По сравнению с подходом JSON, подход XML несколько быстрее и менее прожорлив на память – но за счет повышенной сложности."
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677760
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redsky"По сравнению с подходом JSON, подход XML несколько быстрее и менее прожорлив на память – но за счет повышенной сложности."
Как и в случае с XML, парсеры для JSON бывают разные
http://code.google.com/p/json-benchmark/wiki/AndroidBenchmarks
Автор статьи сам пишет что парсер не удачный, всё стразу считывает.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677817
Troglodit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpashaу чувака андроид. откуда возьмутся объекты подлежащие сериализации размером в десятки!!! мегабайт?
а никто про сериализацию в несколько мегабайт не говорил. ТС хотел все данные из XML поместить в БД. При последовательном разборе xml объем файла скорость обработки практически линейная.
ЗЫ. А что несколько десятков мегабайт -это много? 21 век на дворе.

2Blazkowicz
я вполне допускаю,что обработка сферического JSON быстрее cферического XML , но если JSON в обязаловку ВЕСЬ храниться в памяти, то я буду юзать xml и не бояться наткнуться на out of memory.Повторяю самый главный плюс xml валидация документа. Используя схемы все просто и понятно, опять же не надо городить велосипед по проверке корректности данных.Небольшой плюс -это подпись данных, не знаю может в JSON тоже есть,ну и XPath добавляет свои плюшки.
Для обработки пары килобайт действительно XML громоздкий.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677820
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trogloditно если JSON в обязаловку ВЕСЬ храниться в памяти
При чем здесь JSON??? Там парсер кривой использовался. Как и с вариантом XML вместо родного парсера, берется быстрый и проблема решается.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677825
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Trogloditа никто про сериализацию в несколько мегабайт не говорил
неужели?

TrogloditТ.е. держать весь объем в памяти (особенно если он несколько десятков мегабайт)

TrogloditЗЫ. А что несколько десятков мегабайт -это много? 21 век на дворе.
товарищ, вы ключевое слово андроид принципиально в игнор поставили. в ваших краях уже безлимитный мобильный интернет? в наших пока 200-500мб, а потом торможение до gprs. так что 21 век еще немного подождет.
...
Рейтинг: 0 / 0
Как правильно создать и считать коллекцию?
    #37677834
redsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Други, вопрос темы закрыт. Спасибо забыл ник :)

А обсуждение выбора парсера, формата передачи данных и особенностей программирования под Android в вопрос темы не входит ;)
...
Рейтинг: 0 / 0
43 сообщений из 43, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно создать и считать коллекцию?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]