Java,以下哪种方法更能实现更快的响应和内存管理? 100 个类的对象或 1 个带有 arrayList 的对象

标签 java arrays list memory object

在我的项目中,我需要从互联网加载 aml 数据,然后解析它。我在解析xml时没有问题。每个 xml 有 20 个元素。让我用一个示例来解释我的问题。

这是xml的格式:

<XML>
    <Item1> 
        <element1>a</element1> 
        <element2>b</element2> 
        ... 
        <element20>f</element20> 
    </Item1>
    <Item2> 
        <element1>d</element1> 
        <element2>s</element2> 
        ... 
        <element20>l</element20> 
    </Item2>
...
</XML>

我的问题是关于我想要创建的类。一种方法是创建类并将每个元素作为其属性,例如:

class myItems {
    private String element1;
    private String element2;
    ...
    private String element20;
    //and also adding all setters and getters
}

因此,XML 的每一项都会有一个此类的对象。因此,如果我的 xml 文件中有 100 个项目,我将拥有 100 个此类的对象。

第二种方法是在类中使用ArrayList。像这样:

Class myItems {
    ArrayList<String> element1 = new ArrayList<String>();
    ArrayList<String> element2 = new ArrayList<String>();
    ...
    ArrayList<String> element20 = new ArrayList<String>();

    //and for setters and getters
    public ArrayList<String> getElement1() {
        return element1;
    }
    public void setElement1(String str) {
        this.element1.add(str);
    }
    ...
}

因此,我有一个对象,它包含我的所有变量。

我的问题是,就速度、内存消耗和其他方面而言,这些方法中哪一种更好?

最佳答案

在我看来,做到这一点的最佳方法是对您试图表示的对象有一个清晰的模型,作为一个类:

class Item {
    private member; // etc.
    ...
}

您需要将 XML 结构中无意义的内容抽象到您的类中。例如,如果可行的话,您可以将 XML 中的两个或三个元素合并到一个成员中。您可以在创建对象时执行此操作。您最终将获得更小的足迹(更少的公共(public)方法)和更清晰的实现。然后,您可以将程序中的项目列表表示为 List:

List<Item> allItems = new ArrayList<Item>()

就我个人而言,我相信如果您从一开始就没有面临严重的性能限制(我认为您不会),那么清晰和干净的实现胜过性能。您现在应该更加小心设计而不是性能。 Premature optimization通常被视为一件坏事。

不相关,here is an interesting presentation关于 Java 内存消耗:)。

关于Java,以下哪种方法更能实现更快的响应和内存管理? 100 个类的对象或 1 个带有 arrayList 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9191505/

相关文章:

list - Excel VBA 列表验证 - 特殊的运行时错误

java - 构建一个匿名内部类并调用它的方法

java - Guice Servlet 项目在启动时因 IllegalAccessException 而失败

java - 使用预编译的正则表达式模式提高速度

java - 解析 hh :mmaa format 中的简单时间

Python:如何创建组合列表?

javascript - 选择框 PHP 数组 => 单击 Div 上的 Javascript

c# - 在 C# 中将对象转换为字节数组,通过套接字发送它,然后转换回对象

python - 从 Numpy 数组问题中绘制日期

list - 在 Prolog 中以列表形式存储和显示结果