Java\Android中的ArrayList性能

Java\Android中的ArrayList性能,java,android,performance,arraylist,Java,Android,Performance,Arraylist,对不起,我的英语不好。我会尽可能简单地解释我的问题 我正在制作一个应用程序客户端到一个网站。没有社交网络,但有博客 现在,我的应用程序为每个请求下载50篇帖子,其中包含以下信息: 标题、作者、帖子类型、链接 它们以如下方式存储到ArrayList: 标题1,作者1,类型1,链接1,标题2,作者2,类型2,链接2。。。标题50,作者50,类型50,链接50 所以,我在arraylist中有4*50=200个元素 (请注意,此ArrayList在解析网页时使用)。将来,我想存储一些额外的信息,比如帖

对不起,我的英语不好。我会尽可能简单地解释我的问题
我正在制作一个应用程序客户端到一个网站。没有社交网络,但有博客
现在,我的应用程序为每个请求下载50篇帖子,其中包含以下信息:

标题、作者、帖子类型、链接

它们以如下方式存储到ArrayList:

标题1,作者1,类型1,链接1,标题2,作者2,类型2,链接2。。。标题50,作者50,类型50,链接50

所以,我在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;
    }
}
post_data=new ArrayList();
对于(元素e:条目){
post_data.add(e.select(“title”).text();//title
post_data.add(e.select(“author name”).text();//author
post_data.add(例如,select(“category”).attr(“term”).toString();//类型
元素链接_int=e.选择(“链接”);
对于(元素g:链接){
如果(g.attr(“rel”).toString()等于(“self”)){
post_data.add(g.attr(“href”).toString();//post链接(如果有)
}否则{继续;
}
}
页面解析完成后,我立即填写名为“items”的数据scructure(该数据结构用于形成ListView):

for(int i=0;i<(post_data.size());i+=4){
添加(新的内容新的发布项目)(
新功能。此。post_数据。获取(i),
新功能。此。post_数据。获取(i+1),
新功能。此。post_数据。获取(i+2),
新的。这个。post_data.get(i+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
公共类PostInfo{
私有字符串作者:
私有字符串标题;
// ...
}
// ...
公共列表postInfos=新的ArrayList(50);
//检索数据并将其添加到列表中

创建一个数据结构来保存有关帖子的信息,并将该数据结构存储在列表中:

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

// ...

public List<PostInfo> postInfos = new ArrayList<>(50);
// retrieve data and add it to the list
公共类PostInfo{
私有字符串作者:
私有字符串标题;
// ...
}
// ...
公共列表postInfos=新的ArrayList(50);
//检索数据并将其添加到列表中
创建一个类,将“Title、Author、Post类型、Link”作为实例变量。 阅读下载的文章并通过构造函数或setter方法传递变量来创建此类的对象。 将此类的对象存储在ArrayList中。 这样,您可以在arraylist中为50篇文章存储50个对象

公共类博客文章{ 私有字符串作者: 私有字符串标题; 私有字符串postType; 私有字符串链接; }

在你阅读下载帖子的主程序中,你可以说

List<BlogPost> postList = new ArrayList<BlogPost>(50);
BlogPost bPost = new BlogPost(author, title, postType, link);
postList.add(bPost);
List postList=newarraylist(50);
BlogPost=newblogpost(作者、标题、帖子类型、链接);
postList.add(bPost);
创建一个类,将“Title、Author、Post类型、Link”作为实例变量。 阅读下载的文章并通过构造函数或setter方法传递变量来创建此类的对象。 将此类的对象存储在ArrayList中。 这样,您可以在arraylist中为50篇文章存储50个对象

公共类博客文章{ 私有字符串作者: 私有字符串标题; 私有字符串postType; 私有字符串链接; }

在你阅读下载帖子的主程序中,你可以说

List<BlogPost> postList = new ArrayList<BlogPost>(50);
BlogPost bPost = new BlogPost(author, title, postType, link);
postList.add(bPost);
List postList=newarraylist(50);
BlogPost=newblogpost(作者、标题、帖子类型、链接);
postList.add(bPost);

如果您知道列表中将包含多少项,请使用以下容量创建ArrayList:

new ArrayList<>(int capacity);
newarraylist(int-capacity);

默认情况下,new ArrayList()的容量为10个元素。如果达到该容量,ArrayList将使当前容量加倍(10->20->40->80->…)通过创建新数组并放置新旧对象,旧数组将在垃圾收集器清除后被销毁。

如果您知道列表中将包含多少项,请创建具有以下容量的ArrayList:

new ArrayList<>(int capacity);
newarraylist(int-capacity);

默认情况下,new ArrayList()的容量为10个元素。如果达到该容量,ArrayList将使当前容量加倍(10->20->40->80->…)通过创建新数组并放置新旧对象,旧数组将在垃圾收集器处理后被销毁。

您希望信息永久或暂时保留吗?“我担心这会显著降低我的Android应用程序的性能。”你试过了吗?800个元素对于ArrayList来说太小了。没有必要“害怕”我更关心的是你的数据表示——听起来你应该有一个
ArrayList
,其中每篇
Post
都包含标题、作者、类型和链接……而不是每篇
ArrayList
中的4个元素。此外,如果你知道你将收到在大约50篇文章中,您可以将arraylist的大小初始化为50,以避免在arraylist已满时花费不必要的时间展开它:List posts=new arraylist(50);我用代码编辑了这个问题,你能看一下吗?@JonSkeet我正在分析网页时向ArrayList添加元素。我认为我当时无法处理创建Post类实例的问题。在填充ArrayList后,我从ArrayList创建Items类。你希望信息永久或暂时保留吗?“恐怕我不能