ВОЛШЕБНЫЙ номер в Android google io 2011 java source - PullRequest
4 голосов
/ 23 марта 2012

Ниже код получен из открытого исходного кода Google.

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;
}

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

Ответы [ 2 ]

2 голосов
/ 23 марта 2012

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

1 голос
/ 23 марта 2012

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

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

...