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