Home | History | Annotate | Download | only in collect
      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 
     17 package com.google.android.collect;
     18 
     19 import java.util.ArrayList;
     20 import 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  */
     26 public 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