1/*
2 * Copyright (C) 2007 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.google.android.collect;
18
19import java.util.ArrayList;
20import java.util.Collections;
21
22/**
23 * Provides static methods for creating {@code List} instances easily, and other
24 * utility methods for working with lists.
25 */
26public class Lists {
27
28    /**
29     * Creates an empty {@code ArrayList} instance.
30     *
31     * <p><b>Note:</b> if you only need an <i>immutable</i> empty List, use
32     * {@link Collections#emptyList} instead.
33     *
34     * @return a newly-created, initially-empty {@code ArrayList}
35     */
36    public static <E> ArrayList<E> newArrayList() {
37        return new ArrayList<E>();
38    }
39
40    /**
41     * Creates a resizable {@code ArrayList} instance containing the given
42     * elements.
43     *
44     * <p><b>Note:</b> due to a bug in javac 1.5.0_06, we cannot support the
45     * following:
46     *
47     * <p>{@code List<Base> list = Lists.newArrayList(sub1, sub2);}
48     *
49     * <p>where {@code sub1} and {@code sub2} are references to subtypes of
50     * {@code Base}, not of {@code Base} itself. To get around this, you must
51     * use:
52     *
53     * <p>{@code List<Base> list = Lists.<Base>newArrayList(sub1, sub2);}
54     *
55     * @param elements the elements that the list should contain, in order
56     * @return a newly-created {@code ArrayList} containing those elements
57     */
58    public static <E> ArrayList<E> newArrayList(E... elements) {
59        int capacity = (elements.length * 110) / 100 + 5;
60        ArrayList<E> list = new ArrayList<E>(capacity);
61        Collections.addAll(list, elements);
62        return list;
63    }
64}
65