2014-02-23 39 views
1

对不起,我的英文不好。我会尽可能简单地解释我的问题;
我正在为一个网站做一个应用程序客户端。没有社交网络,但有博客。
现在我的应用程序下载每个请求的50个员额以下信息:
Java Android中的ArrayList性能

标题,作者,发表的类型,链接

它们存储到ArrayList中以这样的方式:

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

所以,我在ArrayList中有4 * 50 = 200个元素。
(请注意,此解析网页时使用此ArrayList)。今后,我想存储一些额外的信息,比如帖子的数据,喜欢的数量,链接到头像等等。据我所知,50个帖子会要求在ArrayList中有600-800个元素。我担心这会显着降低我的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应用程序的性能。”你试过了吗?对于ArrayList,800个元素非常小。没有*测试*就没有任何性能问题的“恐惧”。我会更关心你的数据表示 - 听起来你应该有一个'ArrayList ',其中每个'Post'包含标题,作者,类型和链接...而不是'ArrayList '中的4个元素'每篇文章。 –

+0

此外,在你的情况下,如果你知道你将收到约50个帖子,那么你可以初始化你的数组列表大小为50,以避免不必要的时间来扩大数组列表时的数组列表的数目 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

哦,我有这个结构,但它只用于在UI中填充ListView。呃..这个ArrayList(解释有问题)用于解析网页。 – Groosha

1

创建一个包含“标题,作者,帖子类型,链接”的类作为实例变量。 阅读下载的文章,并通过构造函数或setter方法传递变量来创建此类的对象。 将此类的对象存储在ArrayList中。 通过这种方式,您可以在阵列列表中存储50个50个对象的对象。

public class BlogPost { private String author: private String title; 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 - > ...),之后旧数组将被销毁垃圾收集器。