ВОЛШЕБНЫЙ номер в Android google io 2011 java source

Ниже приведен код, взятый из открытого исходного кода Google io.

com.google.android.apps.iosched.util.Lists.java http://code.google.com/p/iosched/source/browse/android/src/com/google/android/apps/iosched/util/Lists.java

public static <E> ArrayList<E> newArrayList(E... elements) {
    int capacity = (elements.length * 110) / 100 + 5;
    ArrayList<E> list = new ArrayList<E>(capacity);
    Collections.addAll(list, elements);
    return list;
}

com.google.android.apps.iosched.util.Sets.java http://code.google.com/p/iosched/source/browse/android/src/com/google/android/apps/iosched/util/Sets.java

public static <E> HashSet<E> newHashSet(E... elements) {
    int capacity = elements.length * 4 / 3 + 1;
    HashSet<E> set = new HashSet<E>(capacity);
    Collections.addAll(set, elements);
    return set;
}

Что должна означать переменная емкости? Заранее спасибо!


person user1165390    schedule 23.03.2012    source источник
comment
Мой вопрос в том, почему они используют это странное уравнение для расчета емкости каждой коллекции. целая емкость = (элементы.длина * 110)/100 + 5;, целая емкость = элементы.длина * 4/3 + 1;   -  person user1165390    schedule 23.03.2012


Ответы (2)


Эти коллекции внутренне используют фиксированный массив для сохранения данных. «capacity» — это начальное количество элементов, которое может вместить массив. Когда вы добавляете больше элементов, чем текущая емкость, внутренний массив должен быть расширен. Это трудоемкая операция, и начальная емкость пытается помочь, если вы знаете, сколько элементов будет добавлено.

person azertiti    schedule 23.03.2012

Это часть класса ArrayList. Предварительная установка емкости предотвращает постепенное увеличение размера больших списков по мере их заполнения, а вместо этого сразу выделяет необходимое пространство.

http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html

person ian.shaun.thomas    schedule 23.03.2012