Элегантный и эффективный способ поместить входящие последовательные данные в структуры - PullRequest
3 голосов
/ 23 декабря 2011

Предположим, у нас есть входящие значения, представляющие таблицу известного размера, например:

-  a  b  c
x  06 07 08
y  10 11 12
z  14 15 16

но значения поступают из потока / итератора или другой последовательной формы в порядке сверху вниз, слева направо:

- a b c x 06 07 08 y 10 11 12 z 14 15 16

Предположим, что данные поступают от какого-либо провайдера, например newVal = provider.getNext(), и мы не можем идти в обратном направлении.

Какой самый элегантный и эффективный (preffer объектно-ориентированный) способ поместить входящие данные в три структуры:

top : 0=>a  1=>b  2=>c
left: 0=>x  1=>y  2=>z
data: 0,0=>06  1,0=>07  2,0=>08
      0,1=>10  1,1=>11  2,1=>12
      0,2=>10  1,2=>11  2,2=>12

Было бы лучше использовать некоторые переключатели / делегаты или просто буферизовать все данные и извлечь части, которые нам нужны, в циклах (предположим, что каждое значение имеет один и тот же тип , скажем, целое число)?

Предположим, что нам не нужно собирать данные в правильной структуре в режиме реального времени (целые данные могут быть буферизованы, но я ищу эффективное решение).

Реальные данные этой проблемы представляют собой тройные «карты», каждая из которых имеет размер около 500x500, извлеченный из файла .xls в расширении java poi, если это важно.

Ответы [ 2 ]

0 голосов
/ 23 декабря 2011

Я нашел это:

http://www.javaprogrammingforums.com/java-programming-tutorials/696-multi-dimension-arraylist-example.html

версия "вектора векторов"

0 голосов
/ 23 декабря 2011

Я думаю, что элегантность и эффективность зависят от задачи, которую вы собираетесь выполнить с данными. В общем случае мне кажется, что наиболее эффективным способом является хранение данных в необработанном формате (например, 060708101112141516) и при условии, что размер элемента постоянен, и мы знаем количество «столбцов», всегда можно получить указатель на любой элемент, знающий его координату (имя строки или столбца или номер). Каждую тройную карту можно также извлечь из такого блока данных.

Но если ваши задачи отличаются от получения элементов по их индексам, реализация может отличаться.

...