2014-02-23 3 views
1

Извините за мой плохой английский. Я постараюсь как можно проще объяснить мою проблему;
Я делаю приложение-клиент на одном веб-сайте. Нет социальной сети, но с блогами.
Теперь мое приложение загрузки 50 сообщений на каждый запрос со следующей информацией:
Производительность ArrayList в Java Android

Название, Автор, Тип почт, Link

Они хранятся в ArrayList таким образом:

Title1, Author1, Type1, Link1, Title2, Author2, Type2, Link2 ... Title50, Author50, Type50, Link50

Итак, у меня есть 4 * 50 = 200 элементов в arraylist.
(Пожалуйста, обратите внимание, что этот ArrayList используется при разборе веб-страницы). В будущем я хочу сохранить дополнительную информацию, такую ​​как данные публикации, количество понравлений, ссылку на аватар и т. Д. Насколько мне известно, 50 сообщений потребуют ~ 600-800 элементов в ArrayList.
Боюсь, что это существенно снизит производительность моего приложения для Android.

Итак, вопрос: Как вы будете рекомендовать хранить проанализированные данные?
Заранее спасибо.

Я покажу некоторый код, чтобы объяснить проблему лучше:
В процессе анализа веб-страницы с Jsoup я делаю следующее вещь:

post_data = new ArrayList<String>(); 
for (Element e : entries) { 
post_data.add(e.select("title").text()); // title 
post_data.add(e.select("author name").text()); // author 
post_data.add(e.select("category").attr("term").toString()); // type 
Elements links_int = e.select("link"); 
    for (Element g : links_int) { 
    if (g.attr("rel").toString().equals("self")) { 
    post_data.add(g.attr("href").toString()); // post link (if there's one) 
    } else { continue; 
    } 
} 

Сразу после страница обрабатывается, я заполнить мои данные scructure под названием «элементы» (и что структура данных используются для формирования ListView):

for (int i = 0; i < (post_data.size()); i += 4) { 
items.add(new WhatsNew_post_Item(
    WhatsNew.this.post_data.get(i), 
    WhatsNew.this.post_data.get(i + 1), 
    WhatsNew.this.post_data.get(i + 2), 
    WhatsNew.this.post_data.get(i + 3))); 
} 
+0

Вы хотите, чтобы информация сохранялась постоянно или временно? – Kakarot

+4

«Боюсь, что это существенно снизит производительность моего приложения для Android». Ты это пробовал? 800 элементов довольно мало для ArrayList. Нет смысла «бояться» проблем с производительностью без * тестирования *. Я бы гораздо больше беспокоился о вашем представлении данных - похоже, у вас должен быть 'ArrayList ', где каждый 'Post' содержит заголовок, автора, тип и ссылку ... а не 4 элемента в' ArrayList ' за сообщение. –

+0

Кроме того, в вашем случае, если вы знаете, что вы получите около 50 сообщений, вы можете инициализировать свой arraylist размером 50, чтобы избежать ненужного времени, чтобы развернуть arraylist, когда он станет полным: Список posts = new ArrayList (50) ; – Kakarot

ответ

3

Создать структуру данных для хранения информации о посте, и сохранить эту структуру данных в списке:

public class PostInfo { 
    private String author: 
    private String title; 
    // ... 
} 

// ... 

public List<PostInfo> postInfos = new ArrayList<>(50); 
// retrieve data and add it to the list 
+0

О, у меня есть эта структура, но она используется только для заполнения ListView в пользовательском интерфейсе. Ermm .. этот ArrayList (объясняется в вопросе) используется при разборе веб-страницы. – Groosha

1

Создать класс, имеющий «Название, Автор, Тип сообщения, Ссылка» в качестве переменных экземпляра. Прочитайте загруженные сообщения и создайте объекты этого класса, передав переменные либо через методы конструктора, либо с помощью setter. Сохраните объекты этого класса в ArrayList. Таким образом, вы можете хранить 50 объектов для 50 сообщений в arraylist.

общественный класс BlogPost { частный автор строк: частный заголовок строки; private String postType; приватное строковое соединение; }

В главной программе, в которой вы читаете загруженные сообщения, вы можете сказать

List<BlogPost> postList = new ArrayList<BlogPost>(50); 
BlogPost bPost = new BlogPost(author, title, postType, link); 
postList.add(bPost); 
1

Если вы знаете, сколько элементов вы получите в списке создать ArrayList с емкостью:

new ArrayList<>(int capacity); 

По умолчанию новый ArrayList <>() имеет вместимость 10 элементов. Если вы достигнете емкости, ArrayList удвоит текущую емкость (10 -> 20 -> 40 -> 80 -> ...), создав новый массив и поместив старые и новые объекты, старый массив будет уничтожен после сборщик мусора.

Смежные вопросы