CollectionUtils.java revision ba5845f23b8fbc985890f892961abc8b39886611
1ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko/*
2ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * Copyright (C) 2015 The Android Open Source Project
3ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko *
4ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
5ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * you may not use this file except in compliance with the License.
6ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * You may obtain a copy of the License at
7ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko *
8ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
9ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko *
10ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * Unless required by applicable law or agreed to in writing, software
11ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
12ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * See the License for the specific language governing permissions and
14ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * limitations under the License
15ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko */
16ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko
17ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkopackage com.android.tv.common;
18ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko
19ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport android.os.Build;
20ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport android.util.ArrayMap;
21ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport android.util.ArraySet;
22ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko
23ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport java.util.Arrays;
24ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport java.util.HashMap;
25ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport java.util.HashSet;
26ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport java.util.Map;
27ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkoimport java.util.Set;
28ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko
29ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko/**
30ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko * Static utilities for collections
31ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko */
32ba5845f23b8fbc985890f892961abc8b39886611Nick Chalkopublic class CollectionUtils {
33ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    /**
34ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     * Returns a new Set suitable for small data sets.
35ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     *
36ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     * <p>In M and above this is a {@link ArraySet} otherwise it is a  {@link HashSet}.
37ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     */
38ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    public static <T> Set<T> createSmallSet() {
39ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
40ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            return new ArraySet<>();
41ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        } else {
42ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            return new HashSet<>();
43ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        }
44ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    }
45ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko
46ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    /**
47ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     * Returns a new Map suitable for small data sets.
48ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     *
49ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     * <p>In M and above this is a {@link ArrayMap} otherwise it is a {@link HashMap}.
50ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     */
51ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    public static <K, V> Map<K, V> createSmallMap() {
52ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
53ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            return new ArrayMap<>();
54ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        } else {
55ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            return new HashMap<>();
56ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        }
57ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    }
58ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko
59ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    /**
60ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     * Returns an array with the arrays concatenated together.
61ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     *
62ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     * @see <a href="http://stackoverflow.com/a/784842/1122089">Stackoverflow answer</a> by
63ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     *      <a href="http://stackoverflow.com/users/40342/joachim-sauer">Joachim Sauer</a>
64ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko     */
65ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    public static <T> T[] concatAll(T[] first, T[]... rest) {
66ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        int totalLength = first.length;
67ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        for (T[] array : rest) {
68ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            totalLength += array.length;
69ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        }
70ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        T[] result = Arrays.copyOf(first, totalLength);
71ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        int offset = first.length;
72ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        for (T[] array : rest) {
73ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            System.arraycopy(array, 0, result, offset, array.length);
74ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko            offset += array.length;
75ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        }
76ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko        return result;
77ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko    }
78ba5845f23b8fbc985890f892961abc8b39886611Nick Chalko}
79