Java, какой из этих способов лучше для достижения более быстрого отклика и управления памятью? 100 объектов класса или 1 объект с arrayList - PullRequest
1 голос
/ 08 февраля 2012

В моем проекте мне нужно загрузить 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 будет иметь один объект этого класса. Итак, если у меня есть 100 элементов в XML-файле, у меня будет 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);
    }
    ...
}

Поэтому у меня есть один объект, в котором есть все мои переменные.

У меня вопрос, какой из этих способов лучше с точки зрения скорости, потребления памяти и всего остального?

Ответы [ 4 ]

1 голос
/ 08 февраля 2012

На мой взгляд, лучший способ сделать это - иметь четкую модель объекта, который вы пытаетесь представить, как класс:

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

Вы захотите абстрагировать бессмысленные вещи из XMLструктурировать в свой класс.Например, вы можете объединить два или три элемента из XML в один элемент, если это имеет смысл.Вы можете сделать это при создании объекта.В итоге вы получите меньшую площадь (меньше общедоступных методов) и более четкую реализацию.Затем вы можете представить список элементов в вашей программе как List:

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

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

Не имеет отношения к этому, вот интересная презентация по потреблению памяти Java:).

1 голос
/ 08 февраля 2012

Ответ - «это зависит» ;-) Вы хотите, чтобы ваши структуры данных отображались в том виде, в каком они «находятся».

т.е. если это действительно сетка шириной 20 столбцов, то почему бы не сохранить данныетаким образом, чтобы вы могли искать его по строке / столбцу.Если каждый элемент индивидуален, то элемент должен быть классом.С точки зрения памяти, вероятно, нет большой разницы.

Для того, что я видел выше, я думаю, что я бы сделал

class Item
{
    private ArrayList<String> items = new ArrayList<String>(20); 
}

И предоставил бы соответствующие геттеры и сеттеры.

0 голосов
/ 08 февраля 2012

Как бы вы использовали это в вашем приложении?

Если к ним обращаются напрямую, например, к getItem1 (), getItem2 () и т. Д., А затем переходите к первому подходу, обратите внимание, что поля должны иметь смысл, если вы хотите, чтобы этот подход был «хорошим».

Если они похожи на ингредиенты рецепта, и вам неважно, в каком порядке они появляются, перейдите к списку ArrayList.

Если они являются значимыми заголовками и могут быть изменены, используйте HashMap, в котором хранятся значения. HashMap - самое гибкое решение, но будьте осторожны, производительность!

0 голосов
/ 08 февраля 2012

Вы получите лучшую производительность и использование памяти за секунду, так как массивы получают слишком много памяти за раз ... обычный массив будет более эффективным.Первый метод более читабелен и, честно говоря, более стандартен.Вы также можете использовать хэш-карту вместо массива, чтобы сделать код более читабельным, так как вы можете назвать поля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...