1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed to the Apache Software Foundation (ASF) under one or more 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contributor license agreements. See the NOTICE file distributed with 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this work for additional information regarding copyright ownership. 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The ASF licenses this file to You under the Apache License, Version 2.0 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * (the "License"); you may not use this file except in compliance with 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the License. You may obtain a copy of the License at 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage java.util; 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.Serializable; 21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.lang.reflect.Array; 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/** 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays} contains static methods which operate on arrays. 25f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 26f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.2 27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Arrays { 294aec69133b8fc525362f4d2b861e5bcc4a7828d2Narayan Kamath private static class ArrayList<E> extends AbstractList<E> implements 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project List<E>, Serializable, RandomAccess { 31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static final long serialVersionUID = -2764017481108945198L; 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private final E[] a; 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 364aec69133b8fc525362f4d2b861e5bcc4a7828d2Narayan Kamath ArrayList(E[] storage) { 37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (storage == null) { 38d43b9ef11a1095967a3396b246639b563e1a4128Kenny Root throw new NullPointerException("storage == null"); 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project a = storage; 41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public boolean contains(Object object) { 45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object != null) { 46adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (E element : a) { 47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object.equals(element)) { 48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 51adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 52adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (E element : a) { 53adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (element == null) { 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public E get(int location) { 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project try { 64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return a[location]; 65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } catch (ArrayIndexOutOfBoundsException e) { 6687201ff38d682b55f456c50da3e742459a56d258Brian Carlstrom throw java.util.ArrayList.throwIndexOutOfBoundsException(location, a.length); 67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 71adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int indexOf(Object object) { 72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object != null) { 73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < a.length; i++) { 74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object.equals(a[i])) { 75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return i; 76adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 77adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 78adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 79adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < a.length; i++) { 80adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (a[i] == null) { 81adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return i; 82adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return -1; 86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int lastIndexOf(Object object) { 90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object != null) { 91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = a.length - 1; i >= 0; i--) { 92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (object.equals(a[i])) { 93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return i; 94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = a.length - 1; i >= 0; i--) { 98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (a[i] == null) { 99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return i; 100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return -1; 104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public E set(int location, E object) { 108415c7497ec02890a73eb293f98f69c1f6983389bElliott Hughes E result = a[location]; 109415c7497ec02890a73eb293f98f69c1f6983389bElliott Hughes a[location] = object; 110415c7497ec02890a73eb293f98f69c1f6983389bElliott Hughes return result; 111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public int size() { 115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return a.length; 116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public Object[] toArray() { 120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return a.clone(); 121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @Override 124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project @SuppressWarnings({"unchecked", "SuspiciousSystemArraycopy"}) 125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public <T> T[] toArray(T[] contents) { 126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int size = size(); 127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (size > contents.length) { 128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?> ct = contents.getClass().getComponentType(); 129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contents = (T[]) Array.newInstance(ct, size); 130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(a, 0, contents, 0, size); 132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (size < contents.length) { 133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project contents[size] = null; 134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return contents; 136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private Arrays() { 140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* empty */ 141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a {@code List} of the objects in the specified array. The size of the 145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code List} cannot be modified, i.e. adding and removing are unsupported, but 146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the elements can be set. Setting an element modifies the underlying 147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * array. 148f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array. 151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return a {@code List} of the elements of the specified array. 152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 153bce3d7cfe03fcb70bd374ad2e8b16ba64a45e993Elliott Hughes @SafeVarargs 154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static <T> List<T> asList(T... array) { 1554aec69133b8fc525362f4d2b861e5bcc4a7828d2Narayan Kamath return new ArrayList<T>(array); 156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 159055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}. 160055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 161055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 162f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 163055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 164055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the non-negative index of the element, or a negative index which 166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is {@code -index - 1} where the element would be inserted. 167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 168adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int binarySearch(byte[] array, byte value) { 169055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return binarySearch(array, 0, array.length, value); 170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 173055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}, 174055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * in the range specified by fromIndex (inclusive) and toIndex (exclusive). 175055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 176055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 177f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 178055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 179055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param startIndex the inclusive start index. 180055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param endIndex the exclusive start index. 181055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 182055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the non-negative index of the element, or a negative index which 183055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is {@code -index - 1} where the element would be inserted. 184055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code startIndex > endIndex} 185055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code startIndex < 0 || endIndex > array.length} 186055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 187055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 188055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int binarySearch(byte[] array, int startIndex, int endIndex, byte value) { 189055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes checkBinarySearchBounds(startIndex, endIndex, array.length); 190055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int lo = startIndex; 191055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int hi = endIndex - 1; 192055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 193055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes while (lo <= hi) { 194055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int mid = (lo + hi) >>> 1; 195055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes byte midVal = array[mid]; 196055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 197055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (midVal < value) { 198055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes lo = mid + 1; 199055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else if (midVal > value) { 200055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes hi = mid - 1; 201055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else { 202055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return mid; // value found 203055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 204055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 205055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return ~lo; // value not present 206055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 207055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 208055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 209055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}. 210055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 211055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 212055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 213055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 214055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the non-negative index of the element, or a negative index which 216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is {@code -index - 1} where the element would be inserted. 217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int binarySearch(char[] array, char value) { 219055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return binarySearch(array, 0, array.length, value); 220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 223055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}, 224055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * in the range specified by fromIndex (inclusive) and toIndex (exclusive). 225055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 226055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 227f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 228055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 229055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param startIndex the inclusive start index. 230055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param endIndex the exclusive start index. 231055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 232055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the non-negative index of the element, or a negative index which 233055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is {@code -index - 1} where the element would be inserted. 234055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code startIndex > endIndex} 235055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code startIndex < 0 || endIndex > array.length} 236055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 237055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 238055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int binarySearch(char[] array, int startIndex, int endIndex, char value) { 239055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes checkBinarySearchBounds(startIndex, endIndex, array.length); 240055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int lo = startIndex; 241055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int hi = endIndex - 1; 242055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 243055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes while (lo <= hi) { 244055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int mid = (lo + hi) >>> 1; 245055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes char midVal = array[mid]; 246055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 247055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (midVal < value) { 248055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes lo = mid + 1; 249055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else if (midVal > value) { 250055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes hi = mid - 1; 251055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else { 252055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return mid; // value found 253055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 254055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 255055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return ~lo; // value not present 256055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 257055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 258055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 259055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}. 260055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 261055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 262055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 263055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 264055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the non-negative index of the element, or a negative index which 266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is {@code -index - 1} where the element would be inserted. 267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int binarySearch(double[] array, double value) { 269055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return binarySearch(array, 0, array.length, value); 270055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 271055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 272055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 273055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}, 274055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * in the range specified by fromIndex (inclusive) and toIndex (exclusive). 275055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 276055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 277055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 278055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 279055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param startIndex the inclusive start index. 280055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param endIndex the exclusive start index. 281055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 282055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the non-negative index of the element, or a negative index which 283055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is {@code -index - 1} where the element would be inserted. 284055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code startIndex > endIndex} 285055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code startIndex < 0 || endIndex > array.length} 286055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 287055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 288055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int binarySearch(double[] array, int startIndex, int endIndex, double value) { 289055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes checkBinarySearchBounds(startIndex, endIndex, array.length); 290055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int lo = startIndex; 291055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int hi = endIndex - 1; 2927d6b0007041b192e33858c38d099561237264cb0Joshua Bloch 2937d6b0007041b192e33858c38d099561237264cb0Joshua Bloch while (lo <= hi) { 2947d6b0007041b192e33858c38d099561237264cb0Joshua Bloch int mid = (lo + hi) >>> 1; 2957d6b0007041b192e33858c38d099561237264cb0Joshua Bloch double midVal = array[mid]; 2967d6b0007041b192e33858c38d099561237264cb0Joshua Bloch 2977d6b0007041b192e33858c38d099561237264cb0Joshua Bloch if (midVal < value) { 2987d6b0007041b192e33858c38d099561237264cb0Joshua Bloch lo = mid + 1; 2997d6b0007041b192e33858c38d099561237264cb0Joshua Bloch } else if (midVal > value) { 3007d6b0007041b192e33858c38d099561237264cb0Joshua Bloch hi = mid - 1; 3017d6b0007041b192e33858c38d099561237264cb0Joshua Bloch } else if (midVal != 0 && midVal == value) { 3027d6b0007041b192e33858c38d099561237264cb0Joshua Bloch return mid; // value found 3037d6b0007041b192e33858c38d099561237264cb0Joshua Bloch } else { // Either midVal and value are == 0 or at least one is NaN 3047d6b0007041b192e33858c38d099561237264cb0Joshua Bloch long midValBits = Double.doubleToLongBits(midVal); 3057d6b0007041b192e33858c38d099561237264cb0Joshua Bloch long valueBits = Double.doubleToLongBits(value); 3067d6b0007041b192e33858c38d099561237264cb0Joshua Bloch 307055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (midValBits < valueBits) { 3087d6b0007041b192e33858c38d099561237264cb0Joshua Bloch lo = mid + 1; // (-0.0, 0.0) or (not NaN, NaN); midVal < val 309055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else if (midValBits > valueBits) { 3107d6b0007041b192e33858c38d099561237264cb0Joshua Bloch hi = mid - 1; // (0.0, -0.0) or (NaN, not NaN); midVal > val 311055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else { 3127d6b0007041b192e33858c38d099561237264cb0Joshua Bloch return mid; // bit patterns are equal; value found 313055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 3167d6b0007041b192e33858c38d099561237264cb0Joshua Bloch return ~lo; // value not present 317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 320055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}. 321055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 322055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 323f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 324055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 325055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the non-negative index of the element, or a negative index which 327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is {@code -index - 1} where the element would be inserted. 328adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int binarySearch(float[] array, float value) { 330055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return binarySearch(array, 0, array.length, value); 331055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 332055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 333055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 334055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}, 335055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * in the range specified by fromIndex (inclusive) and toIndex (exclusive). 336055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 337055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 338055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 339055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 340055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param startIndex the inclusive start index. 341055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param endIndex the exclusive start index. 342055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 343055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the non-negative index of the element, or a negative index which 344055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is {@code -index - 1} where the element would be inserted. 345055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code startIndex > endIndex} 346055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code startIndex < 0 || endIndex > array.length} 347055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 348055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 349055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int binarySearch(float[] array, int startIndex, int endIndex, float value) { 350055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes checkBinarySearchBounds(startIndex, endIndex, array.length); 351055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int lo = startIndex; 352055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int hi = endIndex - 1; 3537d6b0007041b192e33858c38d099561237264cb0Joshua Bloch 3547d6b0007041b192e33858c38d099561237264cb0Joshua Bloch while (lo <= hi) { 3557d6b0007041b192e33858c38d099561237264cb0Joshua Bloch int mid = (lo + hi) >>> 1; 3567d6b0007041b192e33858c38d099561237264cb0Joshua Bloch float midVal = array[mid]; 3577d6b0007041b192e33858c38d099561237264cb0Joshua Bloch 3587d6b0007041b192e33858c38d099561237264cb0Joshua Bloch if (midVal < value) { 3597d6b0007041b192e33858c38d099561237264cb0Joshua Bloch lo = mid + 1; 3607d6b0007041b192e33858c38d099561237264cb0Joshua Bloch } else if (midVal > value) { 3617d6b0007041b192e33858c38d099561237264cb0Joshua Bloch hi = mid - 1; 3627d6b0007041b192e33858c38d099561237264cb0Joshua Bloch } else if (midVal != 0 && midVal == value) { 3637d6b0007041b192e33858c38d099561237264cb0Joshua Bloch return mid; // value found 3647d6b0007041b192e33858c38d099561237264cb0Joshua Bloch } else { // Either midVal and value are == 0 or at least one is NaN 3657d6b0007041b192e33858c38d099561237264cb0Joshua Bloch int midValBits = Float.floatToIntBits(midVal); 3667d6b0007041b192e33858c38d099561237264cb0Joshua Bloch int valueBits = Float.floatToIntBits(value); 3677d6b0007041b192e33858c38d099561237264cb0Joshua Bloch 368055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (midValBits < valueBits) { 3697d6b0007041b192e33858c38d099561237264cb0Joshua Bloch lo = mid + 1; // (-0.0, 0.0) or (not NaN, NaN); midVal < val 370055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else if (midValBits > valueBits) { 3717d6b0007041b192e33858c38d099561237264cb0Joshua Bloch hi = mid - 1; // (0.0, -0.0) or (NaN, not NaN); midVal > val 372055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else { 3737d6b0007041b192e33858c38d099561237264cb0Joshua Bloch return mid; // bit patterns are equal; value found 374055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 3777d6b0007041b192e33858c38d099561237264cb0Joshua Bloch return ~lo; // value not present 378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 381055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}. 382055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 383055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 384f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 385055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 386055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the non-negative index of the element, or a negative index which 388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is {@code -index - 1} where the element would be inserted. 389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 390055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int binarySearch(int[] array, int value) { 391055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return binarySearch(array, 0, array.length, value); 392055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 3937d6b0007041b192e33858c38d099561237264cb0Joshua Bloch 394055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 395055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}, 396055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * in the range specified by fromIndex (inclusive) and toIndex (exclusive). 397055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 398055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 399055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 400055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 401055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param startIndex the inclusive start index. 402055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param endIndex the exclusive start index. 403055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 404055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the non-negative index of the element, or a negative index which 405055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is {@code -index - 1} where the element would be inserted. 406055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code startIndex > endIndex} 407055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code startIndex < 0 || endIndex > array.length} 408055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 409055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 410055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int binarySearch(int[] array, int startIndex, int endIndex, int value) { 411055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes checkBinarySearchBounds(startIndex, endIndex, array.length); 412055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int lo = startIndex; 413055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int hi = endIndex - 1; 4147d6b0007041b192e33858c38d099561237264cb0Joshua Bloch 415055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes while (lo <= hi) { 416055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int mid = (lo + hi) >>> 1; 417055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int midVal = array[mid]; 418055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 419055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (midVal < value) { 420055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes lo = mid + 1; 421055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else if (midVal > value) { 422055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes hi = mid - 1; 423055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else { 424055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return mid; // value found 425055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 426055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 427055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return ~lo; // value not present 428055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 431055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}. 432055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 433055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 434f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 435055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 436055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the non-negative index of the element, or a negative index which 438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is {@code -index - 1} where the element would be inserted. 439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int binarySearch(long[] array, long value) { 441055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return binarySearch(array, 0, array.length, value); 442055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 443055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 444055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 445055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}, 446055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * in the range specified by fromIndex (inclusive) and toIndex (exclusive). 447055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 448055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 449055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 450055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 451055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param startIndex the inclusive start index. 452055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param endIndex the exclusive start index. 453055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 454055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the non-negative index of the element, or a negative index which 455055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is {@code -index - 1} where the element would be inserted. 456055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code startIndex > endIndex} 457055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code startIndex < 0 || endIndex > array.length} 458055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 459055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 460055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int binarySearch(long[] array, int startIndex, int endIndex, long value) { 461055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes checkBinarySearchBounds(startIndex, endIndex, array.length); 462055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int lo = startIndex; 463055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int hi = endIndex - 1; 464055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 465055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes while (lo <= hi) { 466055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int mid = (lo + hi) >>> 1; 467055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes long midVal = array[mid]; 468055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 469055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (midVal < value) { 470055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes lo = mid + 1; 471055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else if (midVal > value) { 472055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes hi = mid - 1; 473055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else { 474055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return mid; // value found 475055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 4767d6b0007041b192e33858c38d099561237264cb0Joshua Bloch } 4777d6b0007041b192e33858c38d099561237264cb0Joshua Bloch return ~lo; // value not present 478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 481055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}. 482055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 483055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 484f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 485055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 486055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the non-negative index of the element, or a negative index which 488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is {@code -index - 1} where the element would be inserted. 489f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ClassCastException 490055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * if an element in the array or the search element does not 491055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * implement {@code Comparable}, or cannot be compared to each other. 492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 4937d6b0007041b192e33858c38d099561237264cb0Joshua Bloch public static int binarySearch(Object[] array, Object value) { 494055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return binarySearch(array, 0, array.length, value); 495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 498055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}, 499055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * in the range specified by fromIndex (inclusive) and toIndex (exclusive). 500055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 501055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 502f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 503055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 504055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param startIndex the inclusive start index. 505055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param endIndex the exclusive start index. 506055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the non-negative index of the element, or a negative index which 508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is {@code -index - 1} where the element would be inserted. 509f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ClassCastException 510055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * if an element in the array or the search element does not 511055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * implement {@code Comparable}, or cannot be compared to each other. 512055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code startIndex > endIndex} 513055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code startIndex < 0 || endIndex > array.length} 514055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 516055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int binarySearch(Object[] array, int startIndex, int endIndex, Object value) { 517055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes checkBinarySearchBounds(startIndex, endIndex, array.length); 518055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int lo = startIndex; 519055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int hi = endIndex - 1; 520055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 521055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes while (lo <= hi) { 522055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int mid = (lo + hi) >>> 1; 523055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes @SuppressWarnings("unchecked") 524055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int midValCmp = ((Comparable) array[mid]).compareTo(value); 525055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 526055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (midValCmp < 0) { 527055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes lo = mid + 1; 528055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else if (midValCmp > 0) { 529055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes hi = mid - 1; 530055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else { 531055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return mid; // value found 532055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 533055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 534055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return ~lo; // value not present 535055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 536055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 537055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 538055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}, 539162a12c1442641a95fe95859fa4e561b22db049fElliott Hughes * using {@code comparator} to compare elements. 540055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 541055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 542055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 543055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 544055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 545055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param comparator the {@code Comparator} used to compare the elements. 546055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the non-negative index of the element, or a negative index which 547055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is {@code -index - 1} where the element would be inserted. 548055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ClassCastException 549055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * if an element in the array or the search element does not 550055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * implement {@code Comparable}, or cannot be compared to each other. 551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 552055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static <T> int binarySearch(T[] array, T value, Comparator<? super T> comparator) { 553055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return binarySearch(array, 0, array.length, value, comparator); 554055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 555055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 556055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 557055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}, 558055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * in the range specified by fromIndex (inclusive) and toIndex (exclusive), 559162a12c1442641a95fe95859fa4e561b22db049fElliott Hughes * using {@code comparator} to compare elements. 560055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 561055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 562055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 563055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 564055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param startIndex the inclusive start index. 565055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param endIndex the exclusive start index. 566055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 567055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param comparator the {@code Comparator} used to compare the elements. 568055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the non-negative index of the element, or a negative index which 569055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is {@code -index - 1} where the element would be inserted. 570055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ClassCastException 571055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * if an element in the array or the search element does not 572055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * implement {@code Comparable}, or cannot be compared to each other. 573055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code startIndex > endIndex} 574055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code startIndex < 0 || endIndex > array.length} 575055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 576055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 577055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static <T> int binarySearch(T[] array, int startIndex, int endIndex, T value, 578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Comparator<? super T> comparator) { 579055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (comparator == null) { 580055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return binarySearch(array, startIndex, endIndex, value); 581055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 583055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes checkBinarySearchBounds(startIndex, endIndex, array.length); 584055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int lo = startIndex; 585055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int hi = endIndex - 1; 5867d6b0007041b192e33858c38d099561237264cb0Joshua Bloch 5877d6b0007041b192e33858c38d099561237264cb0Joshua Bloch while (lo <= hi) { 5887d6b0007041b192e33858c38d099561237264cb0Joshua Bloch int mid = (lo + hi) >>> 1; 5897d6b0007041b192e33858c38d099561237264cb0Joshua Bloch int midValCmp = comparator.compare(array[mid], value); 5907d6b0007041b192e33858c38d099561237264cb0Joshua Bloch 591055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (midValCmp < 0) { 5927d6b0007041b192e33858c38d099561237264cb0Joshua Bloch lo = mid + 1; 593055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else if (midValCmp > 0) { 5947d6b0007041b192e33858c38d099561237264cb0Joshua Bloch hi = mid - 1; 595055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else { 5967d6b0007041b192e33858c38d099561237264cb0Joshua Bloch return mid; // value found 597055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 5997d6b0007041b192e33858c38d099561237264cb0Joshua Bloch return ~lo; // value not present 600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 603055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}. 604055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 605055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 606f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 607055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 608055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the non-negative index of the element, or a negative index which 610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is {@code -index - 1} where the element would be inserted. 611adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int binarySearch(short[] array, short value) { 613055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return binarySearch(array, 0, array.length, value); 614055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 615055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 616055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 617055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Performs a binary search for {@code value} in the ascending sorted array {@code array}, 618055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * in the range specified by fromIndex (inclusive) and toIndex (exclusive). 619055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Searching in an unsorted array has an undefined result. It's also undefined which element 620055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is found if there are multiple occurrences of the same element. 621055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 622055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param array the sorted array to search. 623055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param startIndex the inclusive start index. 624055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param endIndex the exclusive start index. 625055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param value the element to find. 626055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the non-negative index of the element, or a negative index which 627055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * is {@code -index - 1} where the element would be inserted. 628055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code startIndex > endIndex} 629055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code startIndex < 0 || endIndex > array.length} 630055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 631055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 632055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int binarySearch(short[] array, int startIndex, int endIndex, short value) { 633055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes checkBinarySearchBounds(startIndex, endIndex, array.length); 634055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int lo = startIndex; 635055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int hi = endIndex - 1; 636055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 637055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes while (lo <= hi) { 638055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int mid = (lo + hi) >>> 1; 639055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes short midVal = array[mid]; 640055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 641055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (midVal < value) { 642055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes lo = mid + 1; 643055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else if (midVal > value) { 644055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes hi = mid - 1; 645055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } else { 646055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return mid; // value found 647055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 648055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 649055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return ~lo; // value not present 650055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 651055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 652055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes private static void checkBinarySearchBounds(int startIndex, int endIndex, int length) { 653055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (startIndex > endIndex) { 654055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 655055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 656055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (startIndex < 0 || endIndex > length) { 657055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 658055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 662adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified array with the specified element. 663f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 664adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code byte} array to fill. 666adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code byte} element. 668adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(byte[] array, byte value) { 670adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array.length; i++) { 671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 672adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 674adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 676adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified range in the array with the specified element. 677f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 678adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 679adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code byte} array to fill. 680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first index to fill. 682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to fill. 684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 685adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code byte} element. 686f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 688f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 690adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(byte[] array, int start, int end, byte value) { 692b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkStartAndEnd(array.length, start, end); 693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = start; i < end; i++) { 694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 695adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified array with the specified element. 700f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 702adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code short} array to fill. 703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 704adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code short} element. 705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(short[] array, short value) { 707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array.length; i++) { 708adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 711adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 712adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 713adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified range in the array with the specified element. 714f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 715adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 716adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code short} array to fill. 717adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 718adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first index to fill. 719adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 720adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to fill. 721adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 722adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code short} element. 723f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 724adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 725f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 726adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 727adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 728adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(short[] array, int start, int end, short value) { 729b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkStartAndEnd(array.length, start, end); 730adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = start; i < end; i++) { 731adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 732adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 733adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 734adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 736adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified array with the specified element. 737f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code char} array to fill. 740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code char} element. 742adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(char[] array, char value) { 744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array.length; i++) { 745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 747adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified range in the array with the specified element. 751f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 752adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code char} array to fill. 754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first index to fill. 756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to fill. 758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 759adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code char} element. 760f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 761adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 762f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 765adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(char[] array, int start, int end, char value) { 766b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkStartAndEnd(array.length, start, end); 767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = start; i < end; i++) { 768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 770adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified array with the specified element. 774f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 776adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code int} array to fill. 777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code int} element. 779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(int[] array, int value) { 781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array.length; i++) { 782adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified range in the array with the specified element. 788f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 789adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code int} array to fill. 791adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first index to fill. 793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to fill. 795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 796adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code int} element. 797f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 799f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 801adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(int[] array, int start, int end, int value) { 803b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkStartAndEnd(array.length, start, end); 804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = start; i < end; i++) { 805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 807adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified array with the specified element. 811f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 813adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code long} array to fill. 814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code long} element. 816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(long[] array, long value) { 818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array.length; i++) { 819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 820adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 822adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified range in the array with the specified element. 825f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 827adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code long} array to fill. 828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first index to fill. 830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to fill. 832adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code long} element. 834f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 836f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 837adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(long[] array, int start, int end, long value) { 840b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkStartAndEnd(array.length, start, end); 841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = start; i < end; i++) { 842adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified array with the specified element. 848f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 849adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code float} array to fill. 851adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code float} element. 853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(float[] array, float value) { 855adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array.length; i++) { 856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 860adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified range in the array with the specified element. 862f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code float} array to fill. 865adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first index to fill. 867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to fill. 869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 870adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code float} element. 871f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 873f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(float[] array, int start, int end, float value) { 877b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkStartAndEnd(array.length, start, end); 878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = start; i < end; i++) { 879adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 883adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 884adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified array with the specified element. 885f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 886adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 887adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code double} array to fill. 888adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 889adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code double} element. 890adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 891adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(double[] array, double value) { 892adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array.length; i++) { 893adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 894adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 895adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 896adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 897adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 898adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified range in the array with the specified element. 899f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 900adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 901adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code double} array to fill. 902adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 903adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first index to fill. 904adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 905adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to fill. 906adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 907adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code double} element. 908f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 909adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 910f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 911adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(double[] array, int start, int end, double value) { 914b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkStartAndEnd(array.length, start, end); 915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = start; i < end; i++) { 916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified array with the specified element. 922f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 923adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code boolean} array to fill. 925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code boolean} element. 927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(boolean[] array, boolean value) { 929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array.length; i++) { 930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 931adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 933adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified range in the array with the specified element. 936f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code boolean} array to fill. 939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first index to fill. 941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to fill. 943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code boolean} element. 945f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 947f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 948adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 949adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(boolean[] array, int start, int end, boolean value) { 951b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkStartAndEnd(array.length, start, end); 952adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = start; i < end; i++) { 953adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 954adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified array with the specified element. 959f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 961adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Object} array to fill. 962adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Object} element. 964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(Object[] array, Object value) { 966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array.length; i++) { 967adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 968adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 969adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 971adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Fills the specified range in the array with the specified element. 973f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Object} array to fill. 976adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 977adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first index to fill. 978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to fill. 980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param value 981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Object} element. 982f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 984f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void fill(Object[] array, int start, int end, Object value) { 988b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes Arrays.checkStartAndEnd(array.length, start, end); 989adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = start; i < end; i++) { 990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project array[i] = value; 991adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 992adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 994adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a hash code based on the contents of the given array. For any two 996f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * {@code boolean} arrays {@code a} and {@code b}, if 997adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.equals(a, b)} returns {@code true}, it means 998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that the return value of {@code Arrays.hashCode(a)} equals {@code Arrays.hashCode(b)}. 999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The value returned by this method is the same value as the 1001910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * {@link List#hashCode()} method which is invoked on a {@link List} 1002910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * containing a sequence of {@link Boolean} instances representing the 1003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements of array in the same order. If the array is {@code null}, the return 1004adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value is 0. 1005f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array whose hash code to compute. 1008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for {@code array}. 1009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int hashCode(boolean[] array) { 1011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 1012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hashCode = 1; 1015adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (boolean element : array) { 1016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // 1231, 1237 are hash code values for boolean value 1017adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashCode = 31 * hashCode + (element ? 1231 : 1237); 1018adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1019adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode; 1020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1023adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a hash code based on the contents of the given array. For any two 1024f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * not-null {@code int} arrays {@code a} and {@code b}, if 1025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.equals(a, b)} returns {@code true}, it means 1026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that the return value of {@code Arrays.hashCode(a)} equals {@code Arrays.hashCode(b)}. 1027adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The value returned by this method is the same value as the 1029910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * {@link List#hashCode()} method which is invoked on a {@link List} 1030910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * containing a sequence of {@link Integer} instances representing the 1031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements of array in the same order. If the array is {@code null}, the return 1032adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value is 0. 1033f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array whose hash code to compute. 1036adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for {@code array}. 1037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int hashCode(int[] array) { 1039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 1040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hashCode = 1; 1043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int element : array) { 1044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // the hash code value for integer value is integer value itself 1045adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashCode = 31 * hashCode + element; 1046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1047adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode; 1048adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1049adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a hash code based on the contents of the given array. For any two 1052f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * {@code short} arrays {@code a} and {@code b}, if 1053adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.equals(a, b)} returns {@code true}, it means 1054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that the return value of {@code Arrays.hashCode(a)} equals {@code Arrays.hashCode(b)}. 1055adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The value returned by this method is the same value as the 1057910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * {@link List#hashCode()} method which is invoked on a {@link List} 1058910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * containing a sequence of {@link Short} instances representing the 1059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements of array in the same order. If the array is {@code null}, the return 1060adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value is 0. 1061f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1062adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array whose hash code to compute. 1064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for {@code array}. 1065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1066adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int hashCode(short[] array) { 1067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 1068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hashCode = 1; 1071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (short element : array) { 1072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // the hash code value for short value is its integer value 1073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashCode = 31 * hashCode + element; 1074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1075adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode; 1076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1077adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1078adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1079adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a hash code based on the contents of the given array. For any two 1080f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * {@code char} arrays {@code a} and {@code b}, if 1081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.equals(a, b)} returns {@code true}, it means 1082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that the return value of {@code Arrays.hashCode(a)} equals {@code Arrays.hashCode(b)}. 1083adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The value returned by this method is the same value as the 1085910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * {@link List#hashCode()} method which is invoked on a {@link List} 1086910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * containing a sequence of {@link Character} instances representing the 1087adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements of array in the same order. If the array is {@code null}, the return 1088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value is 0. 1089f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1090adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array whose hash code to compute. 1092adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for {@code array}. 1093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int hashCode(char[] array) { 1095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 1096adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hashCode = 1; 1099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (char element : array) { 1100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // the hash code value for char value is its integer value 1101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashCode = 31 * hashCode + element; 1102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode; 1104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a hash code based on the contents of the given array. For any two 1108f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * {@code byte} arrays {@code a} and {@code b}, if 1109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.equals(a, b)} returns {@code true}, it means 1110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that the return value of {@code Arrays.hashCode(a)} equals {@code Arrays.hashCode(b)}. 1111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The value returned by this method is the same value as the 1113910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * {@link List#hashCode()} method which is invoked on a {@link List} 1114910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * containing a sequence of {@link Byte} instances representing the 1115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements of array in the same order. If the array is {@code null}, the return 1116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value is 0. 1117f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array whose hash code to compute. 1120adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for {@code array}. 1121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1122adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int hashCode(byte[] array) { 1123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 1124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1126adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hashCode = 1; 1127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (byte element : array) { 1128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // the hash code value for byte value is its integer value 1129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashCode = 31 * hashCode + element; 1130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode; 1132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1135adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a hash code based on the contents of the given array. For any two 1136f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * {@code long} arrays {@code a} and {@code b}, if 1137adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.equals(a, b)} returns {@code true}, it means 1138adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that the return value of {@code Arrays.hashCode(a)} equals {@code Arrays.hashCode(b)}. 1139adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The value returned by this method is the same value as the 1141910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * {@link List#hashCode()} method which is invoked on a {@link List} 1142910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * containing a sequence of {@link Long} instances representing the 1143adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements of array in the same order. If the array is {@code null}, the return 1144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value is 0. 1145f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1147adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array whose hash code to compute. 1148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for {@code array}. 1149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1150adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int hashCode(long[] array) { 1151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 1152adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hashCode = 1; 1155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (long elementValue : array) { 1156adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the hash code value for long value is (int) (value ^ (value >>> 1158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 32)) 1159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashCode = 31 * hashCode 1161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project + (int) (elementValue ^ (elementValue >>> 32)); 1162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode; 1164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1165adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1167adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a hash code based on the contents of the given array. For any two 1168f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * {@code float} arrays {@code a} and {@code b}, if 1169adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.equals(a, b)} returns {@code true}, it means 1170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that the return value of {@code Arrays.hashCode(a)} equals {@code Arrays.hashCode(b)}. 1171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The value returned by this method is the same value as the 1173910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * {@link List#hashCode()} method which is invoked on a {@link List} 1174910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * containing a sequence of {@link Float} instances representing the 1175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements of array in the same order. If the array is {@code null}, the return 1176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value is 0. 1177f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array whose hash code to compute. 1180adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for {@code array}. 1181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1182adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int hashCode(float[] array) { 1183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 1184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1186adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hashCode = 1; 1187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (float element : array) { 1188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the hash code value for float value is 1190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Float.floatToIntBits(value) 1191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashCode = 31 * hashCode + Float.floatToIntBits(element); 1193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode; 1195adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1197adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1198adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a hash code based on the contents of the given array. For any two 1199f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * {@code double} arrays {@code a} and {@code b}, if 1200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.equals(a, b)} returns {@code true}, it means 1201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * that the return value of {@code Arrays.hashCode(a)} equals {@code Arrays.hashCode(b)}. 1202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1203adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The value returned by this method is the same value as the 1204910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * {@link List#hashCode()} method which is invoked on a {@link List} 1205910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * containing a sequence of {@link Double} instances representing the 1206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements of array in the same order. If the array is {@code null}, the return 1207adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * value is 0. 1208f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1210adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array whose hash code to compute. 1211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for {@code array}. 1212adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int hashCode(double[] array) { 1214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 1215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1216adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hashCode = 1; 1218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (double element : array) { 1220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project long v = Double.doubleToLongBits(element); 1221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the hash code value for double value is (int) (v ^ (v >>> 32)) 1223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * where v = Double.doubleToLongBits(value) 1224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1225adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashCode = 31 * hashCode + (int) (v ^ (v >>> 32)); 1226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1227adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode; 1228adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1229adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a hash code based on the contents of the given array. If the 1232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * array contains other arrays as its elements, the hash code is based on 1233adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * their identities not their contents. So it is acceptable to invoke this 1234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * method on an array that contains itself as an element, either directly or 1235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * indirectly. 1236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1237f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * For any two arrays {@code a} and {@code b}, if 1238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.equals(a, b)} returns {@code true}, it means 1239f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * that the return value of {@code Arrays.hashCode(a)} equals 1240adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.hashCode(b)}. 1241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1242adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The value returned by this method is the same value as the method 1243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Arrays.asList(array).hashCode(). If the array is {@code null}, the return value 1244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is 0. 1245f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1246adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array whose hash code to compute. 1248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for {@code array}. 1249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int hashCode(Object[] array) { 1251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 1252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hashCode = 1; 1255adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (Object element : array) { 1256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int elementHashCode; 1257adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1258adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (element == null) { 1259adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project elementHashCode = 0; 1260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 1261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project elementHashCode = (element).hashCode(); 1262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1263adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashCode = 31 * hashCode + elementHashCode; 1264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode; 1266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1267adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns a hash code based on the "deep contents" of the given array. If 1270adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array contains other arrays as its elements, the hash code is based 1271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * on their contents not their identities. So it is not acceptable to invoke 1272adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * this method on an array that contains itself as an element, either 1273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * directly or indirectly. 1274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1275f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * For any two arrays {@code a} and {@code b}, if 1276adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.deepEquals(a, b)} returns {@code true}, it 1277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * means that the return value of {@code Arrays.deepHashCode(a)} equals 1278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.deepHashCode(b)}. 1279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * The computation of the value returned by this method is similar to that 1281910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * of the value returned by {@link List#hashCode()} invoked on a 1282910544a773fa8be76ae1fd7d27c15ad6e775082cKenny Root * {@link List} containing a sequence of instances representing the 1283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements of array in the same order. The difference is: If an element e 1284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of array is itself an array, its hash code is computed by calling the 1285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * appropriate overloading of {@code Arrays.hashCode(e)} if e is an array of a 1286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * primitive type, or by calling {@code Arrays.deepHashCode(e)} recursively if e is 1287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * an array of a reference type. The value returned by this method is the 1288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same value as the method {@code Arrays.asList(array).hashCode()}. If the array is 1289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null}, the return value is 0. 1290f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the array whose hash code to compute. 1293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the hash code for {@code array}. 1294adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static int deepHashCode(Object[] array) { 1296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 1297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1298adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int hashCode = 1; 1300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (Object element : array) { 1301adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project int elementHashCode = deepHashCodeElement(element); 1302adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project hashCode = 31 * hashCode + elementHashCode; 1303adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1304adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode; 1305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1306adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1307adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static int deepHashCodeElement(Object element) { 1308adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?> cl; 1309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (element == null) { 1310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return 0; 1311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1313adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cl = element.getClass().getComponentType(); 1314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cl == null) { 1316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return element.hashCode(); 1317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * element is an array 1321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 132209940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath if (element instanceof Object[]) { 1323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return deepHashCode((Object[]) element); 132409940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl == int.class) { 1325adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode((int[]) element); 132609940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl == char.class) { 1327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode((char[]) element); 132809940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl == boolean.class) { 1329adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode((boolean[]) element); 133009940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl == byte.class) { 1331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode((byte[]) element); 133209940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl == long.class) { 1333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode((long[]) element); 133409940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl == float.class) { 1335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode((float[]) element); 133609940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl == double.class) { 1337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return hashCode((double[]) element); 133809940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else { 133909940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath return hashCode((short[]) element); 1340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1342adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the two arrays. 1345f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array1 1347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first {@code byte} array. 1348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array2 1349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the second {@code byte} array. 1350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if both arrays are {@code null} or if the arrays have the 1351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same length and the elements at each index in the two arrays are 1352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal, {@code false} otherwise. 1353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean equals(byte[] array1, byte[] array2) { 1355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == array2) { 1356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == null || array2 == null || array1.length != array2.length) { 1359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array1.length; i++) { 1362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1[i] != array2[i]) { 1363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the two arrays. 1371f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array1 1373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first {@code short} array. 1374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array2 1375adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the second {@code short} array. 1376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if both arrays are {@code null} or if the arrays have the 1377adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same length and the elements at each index in the two arrays are 1378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal, {@code false} otherwise. 1379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean equals(short[] array1, short[] array2) { 1381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == array2) { 1382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == null || array2 == null || array1.length != array2.length) { 1385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array1.length; i++) { 1388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1[i] != array2[i]) { 1389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the two arrays. 1397f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array1 1399adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first {@code char} array. 1400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array2 1401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the second {@code char} array. 1402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if both arrays are {@code null} or if the arrays have the 1403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same length and the elements at each index in the two arrays are 1404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal, {@code false} otherwise. 1405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean equals(char[] array1, char[] array2) { 1407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == array2) { 1408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == null || array2 == null || array1.length != array2.length) { 1411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array1.length; i++) { 1414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1[i] != array2[i]) { 1415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1419adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1420adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1421adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1422adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the two arrays. 1423f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1424adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array1 1425adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first {@code int} array. 1426adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array2 1427adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the second {@code int} array. 1428adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if both arrays are {@code null} or if the arrays have the 1429adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same length and the elements at each index in the two arrays are 1430adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal, {@code false} otherwise. 1431adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1432adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean equals(int[] array1, int[] array2) { 1433adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == array2) { 1434adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1435adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1436adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == null || array2 == null || array1.length != array2.length) { 1437adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1438adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1439adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array1.length; i++) { 1440adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1[i] != array2[i]) { 1441adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1442adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1443adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1444adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1445adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1446adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1447adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1448adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the two arrays. 1449f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1450adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array1 1451adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first {@code long} array. 1452adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array2 1453adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the second {@code long} array. 1454adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if both arrays are {@code null} or if the arrays have the 1455adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same length and the elements at each index in the two arrays are 1456adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal, {@code false} otherwise. 1457adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1458adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean equals(long[] array1, long[] array2) { 1459adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == array2) { 1460adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1461adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1462adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == null || array2 == null || array1.length != array2.length) { 1463adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1464adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1465adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array1.length; i++) { 1466adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1[i] != array2[i]) { 1467adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1468adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1469adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1470adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1471adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1472adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1473adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1474adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the two arrays. The values are compared in the same manner as 1475adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Float.equals()}. 1476f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1477adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array1 1478adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first {@code float} array. 1479adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array2 1480adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the second {@code float} array. 1481adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if both arrays are {@code null} or if the arrays have the 1482adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same length and the elements at each index in the two arrays are 1483adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal, {@code false} otherwise. 1484adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Float#equals(Object) 1485adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1486adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean equals(float[] array1, float[] array2) { 1487adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == array2) { 1488adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1489adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1490adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == null || array2 == null || array1.length != array2.length) { 1491adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1492adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1493adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array1.length; i++) { 1494adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (Float.floatToIntBits(array1[i]) != Float 1495adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .floatToIntBits(array2[i])) { 1496adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1497adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1498adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1499adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1500adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1501adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1502adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1503adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the two arrays. The values are compared in the same manner as 1504adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Double.equals()}. 1505f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1506adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array1 1507adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first {@code double} array. 1508adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array2 1509adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the second {@code double} array. 1510adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if both arrays are {@code null} or if the arrays have the 1511adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same length and the elements at each index in the two arrays are 1512adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal, {@code false} otherwise. 1513adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Double#equals(Object) 1514adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1515adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean equals(double[] array1, double[] array2) { 1516adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == array2) { 1517adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1518adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1519adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == null || array2 == null || array1.length != array2.length) { 1520adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1521adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1522adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array1.length; i++) { 1523adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (Double.doubleToLongBits(array1[i]) != Double 1524adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project .doubleToLongBits(array2[i])) { 1525adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1526adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1527adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1528adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1529adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1530adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1531adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1532adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the two arrays. 1533f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1534adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array1 1535adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first {@code boolean} array. 1536adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array2 1537adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the second {@code boolean} array. 1538adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if both arrays are {@code null} or if the arrays have the 1539adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same length and the elements at each index in the two arrays are 1540adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal, {@code false} otherwise. 1541adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1542adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean equals(boolean[] array1, boolean[] array2) { 1543adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == array2) { 1544adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1545adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1546adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == null || array2 == null || array1.length != array2.length) { 1547adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1548adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1549adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array1.length; i++) { 1550adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1[i] != array2[i]) { 1551adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1552adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1553adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1554adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1555adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1556adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1557adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1558adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Compares the two arrays. 1559f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1560adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array1 1561adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first {@code Object} array. 1562adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array2 1563adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the second {@code Object} array. 1564adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if both arrays are {@code null} or if the arrays have the 1565adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same length and the elements at each index in the two arrays are 1566adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal according to {@code equals()}, {@code false} otherwise. 1567adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1568adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean equals(Object[] array1, Object[] array2) { 1569adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == array2) { 1570adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1571adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1572adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == null || array2 == null || array1.length != array2.length) { 1573adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1574adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1575adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array1.length; i++) { 1576adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object e1 = array1[i], e2 = array2[i]; 1577adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!(e1 == null ? e2 == null : e1.equals(e2))) { 1578adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1579adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1580adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1581adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1582adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1583adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1584adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1585adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Returns {@code true} if the two given arrays are deeply equal to one another. 1586adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unlike the method {@code equals(Object[] array1, Object[] array2)}, this method 1587adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is appropriate for use for nested arrays of arbitrary depth. 1588adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1589adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Two array references are considered deeply equal if they are both {@code null}, 1590adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * or if they refer to arrays that have the same length and the elements at 1591adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * each index in the two arrays are equal. 1592adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1593adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Two {@code null} elements {@code element1} and {@code element2} are possibly deeply equal if any 1594adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * of the following conditions satisfied: 1595adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1596adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code element1} and {@code element2} are both arrays of object reference types, and 1597adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Arrays.deepEquals(element1, element2)} would return {@code true}. 1598adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1599adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code element1} and {@code element2} are arrays of the same primitive type, and the 1600adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * appropriate overloading of {@code Arrays.equals(element1, element2)} would return 1601adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code true}. 1602adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1603adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code element1 == element2} 1604adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1605adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code element1.equals(element2)} would return {@code true}. 1606adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1607adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Note that this definition permits {@code null} elements at any depth. 1608adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 1609adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If either of the given arrays contain themselves as elements, the 1610adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * behavior of this method is uncertain. 1611f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1612adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array1 1613adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the first {@code Object} array. 1614adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array2 1615adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the second {@code Object} array. 1616adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return {@code true} if both arrays are {@code null} or if the arrays have the 1617adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * same length and the elements at each index in the two arrays are 1618adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * equal according to {@code equals()}, {@code false} otherwise. 1619adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1620adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static boolean deepEquals(Object[] array1, Object[] array2) { 1621adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == array2) { 1622adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1623adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1624adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array1 == null || array2 == null || array1.length != array2.length) { 1625adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1626adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1627adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array1.length; i++) { 1628adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object e1 = array1[i], e2 = array2[i]; 1629adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1630adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (!deepEqualsElements(e1, e2)) { 1631adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1632adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1633adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1634adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1635adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1636adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1637adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static boolean deepEqualsElements(Object e1, Object e2) { 1638adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?> cl1, cl2; 1639adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1640adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (e1 == e2) { 1641adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 1642adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1643adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1644adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (e1 == null || e2 == null) { 1645adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1646adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1647adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1648adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cl1 = e1.getClass().getComponentType(); 1649adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project cl2 = e2.getClass().getComponentType(); 1650adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1651adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cl1 != cl2) { 1652adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 1653adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1654adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1655adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (cl1 == null) { 1656adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return e1.equals(e2); 1657adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1658adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1659adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1660adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * compare as arrays 1661adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 166209940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath if (e1 instanceof Object[]) { 1663adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return deepEquals((Object[]) e1, (Object[]) e2); 166409940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl1 == int.class) { 1665adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return equals((int[]) e1, (int[]) e2); 166609940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl1 == char.class) { 1667adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return equals((char[]) e1, (char[]) e2); 166809940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl1 == boolean.class) { 1669adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return equals((boolean[]) e1, (boolean[]) e2); 167009940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl1 == byte.class) { 1671adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return equals((byte[]) e1, (byte[]) e2); 167209940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl1 == long.class) { 1673adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return equals((long[]) e1, (long[]) e2); 167409940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl1 == float.class) { 1675adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return equals((float[]) e1, (float[]) e2); 167609940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else if (cl1 == double.class) { 1677adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return equals((double[]) e1, (double[]) e2); 167809940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath } else { 167909940729ddaf3bfdfa5a04ac69d18b3d84c8b663Narayan Kamath return equals((short[]) e1, (short[]) e2); 1680adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1681adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1682adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1683adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1684adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified array in ascending numerical order. 1685f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1686adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1687adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code byte} array to be sorted. 1688adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1689adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(byte[] array) { 16902626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array); 1691adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1692adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1693adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1694adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified range in the array in ascending numerical order. 1695f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1696adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1697adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code byte} array to be sorted. 1698adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 1699adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the start index to sort. 1700adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 1701adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to sort. 1702f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 1703adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 1704f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 1705adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 1706adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1707adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(byte[] array, int start, int end) { 17082626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array, start, end); 1709adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1710adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 17112d9c5fa8ce0182cd8c14736241b709fd50cab6f8Elliott Hughes /** 17122d9c5fa8ce0182cd8c14736241b709fd50cab6f8Elliott Hughes * Checks that the range described by {@code offset} and {@code count} doesn't exceed 17132d9c5fa8ce0182cd8c14736241b709fd50cab6f8Elliott Hughes * {@code arrayLength}. 17142d9c5fa8ce0182cd8c14736241b709fd50cab6f8Elliott Hughes * 17152d9c5fa8ce0182cd8c14736241b709fd50cab6f8Elliott Hughes * @hide 17162d9c5fa8ce0182cd8c14736241b709fd50cab6f8Elliott Hughes */ 17172d9c5fa8ce0182cd8c14736241b709fd50cab6f8Elliott Hughes public static void checkOffsetAndCount(int arrayLength, int offset, int count) { 1718a1603838fe9e865575c87982e32c6343740e464cElliott Hughes if ((offset | count) < 0 || offset > arrayLength || arrayLength - offset < count) { 1719363291564f107e500e0b584baa0377757cc2ae09Dan Bornstein throw new ArrayIndexOutOfBoundsException(arrayLength, offset, 1720363291564f107e500e0b584baa0377757cc2ae09Dan Bornstein count); 17212d9c5fa8ce0182cd8c14736241b709fd50cab6f8Elliott Hughes } 17222d9c5fa8ce0182cd8c14736241b709fd50cab6f8Elliott Hughes } 17232d9c5fa8ce0182cd8c14736241b709fd50cab6f8Elliott Hughes 1724b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes /** 1725b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes * Checks that the range described by {@code start} and {@code end} doesn't exceed 172609947fcafbd3cccda9ad25e75af173b24f1c10beJesse Wilson * {@code len}. 1727b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes * 1728b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes * @hide 1729b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes */ 1730c8ed4009f3ade95e6cf9ade8cfd1b08f90a8690fJesse Wilson public static void checkStartAndEnd(int len, int start, int end) { 1731c8ed4009f3ade95e6cf9ade8cfd1b08f90a8690fJesse Wilson if (start < 0 || end > len) { 1732c8ed4009f3ade95e6cf9ade8cfd1b08f90a8690fJesse Wilson throw new ArrayIndexOutOfBoundsException("start < 0 || end > len." 1733c8ed4009f3ade95e6cf9ade8cfd1b08f90a8690fJesse Wilson + " start=" + start + ", end=" + end + ", len=" + len); 1734c8ed4009f3ade95e6cf9ade8cfd1b08f90a8690fJesse Wilson } 1735adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (start > end) { 1736b9cc455ed89df1a0cf4186c92b352c9649995d96Elliott Hughes throw new IllegalArgumentException("start > end: " + start + " > " + end); 17375839b909d9528b7726e678a4b696ed37df15d897Jesse Wilson } 1738adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1739adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1740adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1741adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified array in ascending numerical order. 1742f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1743adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1744adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code char} array to be sorted. 1745adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1746adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(char[] array) { 17472626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array); 1748adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1749adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1750adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1751adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified range in the array in ascending numerical order. 1752f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1753adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1754adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code char} array to be sorted. 1755adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 1756adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the start index to sort. 1757adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 1758adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to sort. 1759f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 1760adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 1761f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 1762adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 1763adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1764adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(char[] array, int start, int end) { 17652626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array, start, end); 1766adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1767adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1768adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1769adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified array in ascending numerical order. 1770f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1771adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1772adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code double} array to be sorted. 1773adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #sort(double[], int, int) 1774adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1775adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(double[] array) { 17762626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array); 1777adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1778adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1779adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1780adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified range in the array in ascending numerical order. The 1781adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * values are sorted according to the order imposed by {@code Double.compareTo()}. 1782f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1783adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1784adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code double} array to be sorted. 1785adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 1786adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the start index to sort. 1787adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 1788adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to sort. 1789f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 1790adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 1791f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 1792adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 1793adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Double#compareTo(Double) 1794adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1795adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(double[] array, int start, int end) { 17962626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array, start, end); 1797adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1798adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1799adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1800adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified array in ascending numerical order. 1801f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1802adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1803adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code float} array to be sorted. 1804adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #sort(float[], int, int) 1805adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1806adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(float[] array) { 18072626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array); 1808adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1809adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1810adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1811adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified range in the array in ascending numerical order. The 1812adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * values are sorted according to the order imposed by {@code Float.compareTo()}. 1813f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1814adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1815adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code float} array to be sorted. 1816adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 1817adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the start index to sort. 1818adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 1819adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to sort. 1820f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 1821adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 1822f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 1823adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 1824adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see Float#compareTo(Float) 1825adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1826adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(float[] array, int start, int end) { 18272626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array, start, end); 1828adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1829adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1830adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1831adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified array in ascending numerical order. 1832f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1833adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1834adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code int} array to be sorted. 1835adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1836adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(int[] array) { 18372626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array); 1838adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1839adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1840adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1841adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified range in the array in ascending numerical order. 1842f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1843adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1844adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code int} array to be sorted. 1845adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 1846adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the start index to sort. 1847adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 1848adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to sort. 1849f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 1850adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 1851f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 1852adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 1853adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1854adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(int[] array, int start, int end) { 18552626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array, start, end); 1856adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1857adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1858adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1859adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified array in ascending numerical order. 1860f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1861adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1862adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code long} array to be sorted. 1863adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1864adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(long[] array) { 18652626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array); 1866adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1867adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1868adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1869adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified range in the array in ascending numerical order. 1870f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1871adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 1872adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code long} array to be sorted. 1873adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 1874adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the start index to sort. 1875adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 1876adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to sort. 1877f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 1878adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 1879f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 1880adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 1881adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1882adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(long[] array, int start, int end) { 18832626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array, start, end); 18842626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch } 18852626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch 18862626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch /** 18872626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * Sorts the specified array in ascending numerical order. 18882626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * 18892626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * @param array 18902626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * the {@code short} array to be sorted. 18912626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch */ 18922626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch public static void sort(short[] array) { 18932626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array); 18942626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch } 18952626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch 18962626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch /** 18972626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * Sorts the specified range in the array in ascending numerical order. 18982626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * 18992626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * @param array 19002626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * the {@code short} array to be sorted. 19012626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * @param start 19022626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * the start index to sort. 19032626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * @param end 19042626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * the last + 1 index to sort. 19052626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * @throws IllegalArgumentException 19062626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * if {@code start > end}. 19072626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * @throws ArrayIndexOutOfBoundsException 19082626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch * if {@code start < 0} or {@code end > array.length}. 19092626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch */ 19102626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch public static void sort(short[] array, int start, int end) { 19112626284e3b8aa00ac87146a324854bbd40f0726fJoshua Bloch DualPivotQuicksort.sort(array, start, end); 1912adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1913adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1914f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson// BEGIN android-note 1915adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1916adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /* 1917adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p>If this platform has an optimizing VM, check whether ComparableTimSort 1918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * offers any performance benefit over TimSort in conjunction with a 1919adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * comparator that returns: 1920adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code ((Comparable)first).compareTo(Second)}. 1921adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If not, you are better off deleting ComparableTimSort to eliminate the 1922adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * code duplication. In other words, the commented out code below 1923fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes * is the preferable implementation for sorting arrays of Comparables if it 1924adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * offers sufficient performance. 1925adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1926adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1927adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// /** 1928adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// * A comparator that implements the natural order of a group of 1929adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// * mutually comparable elements. Using this comparator saves us 1930adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// * from duplicating most of the code in this file (one version for 1931fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes// * Comparables, one for explicit comparators). 1932adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// */ 1933fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes// private static final Comparator<Object> NATURAL_ORDER = new Comparator<Object>() { 1934adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// @SuppressWarnings("unchecked") 1935adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// public int compare(Object first, Object second) { 1936adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// return ((Comparable<Object>)first).compareTo(second); 1937adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// } 1938adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// }; 1939adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// 1940adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// public static void sort(Object[] a) { 1941adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// sort(a, 0, a.length, NATURAL_ORDER); 1942adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// } 1943adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// 1944adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// public static void sort(Object[] a, int fromIndex, int toIndex) { 1945adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// sort(a, fromIndex, toIndex, NATURAL_ORDER); 1946adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project// } 1947adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1948f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson// END android-note 1949f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 1950adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1951adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified array in ascending natural order. 1952f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 195335def4c9d5fb52e0eb2cb4fa7d8d10618d7e8baaElliott Hughes * @throws ClassCastException if any element does not implement {@code Comparable}, 195435def4c9d5fb52e0eb2cb4fa7d8d10618d7e8baaElliott Hughes * or if {@code compareTo} throws for any pair of elements. 1955adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1956adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(Object[] array) { 1957adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ComparableTimSort.sort(array); 1958adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 1959adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 1960adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 196135def4c9d5fb52e0eb2cb4fa7d8d10618d7e8baaElliott Hughes * Sorts the specified range in the array in ascending natural order. 1962f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1963adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 1964adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the start index to sort. 1965adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 1966adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to sort. 196735def4c9d5fb52e0eb2cb4fa7d8d10618d7e8baaElliott Hughes * @throws ClassCastException if any element does not implement {@code Comparable}, 196835def4c9d5fb52e0eb2cb4fa7d8d10618d7e8baaElliott Hughes * or if {@code compareTo} throws for any pair of elements. 1969f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 1970adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 1971f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 1972adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 1973adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1974adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static void sort(Object[] array, int start, int end) { 1975adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project ComparableTimSort.sort(array, start, end); 1976f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson } 1977f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson 1978adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 1979adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified range in the array using the specified {@code Comparator}. 1980adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * All elements must be comparable to each other without a 1981adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code ClassCastException} being thrown. 1982f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 1983adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param start 1984adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the start index to sort. 1985adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param end 1986adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the last + 1 index to sort. 1987adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param comparator 1988adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Comparator}. 1989f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ClassCastException 1990adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if elements in the array cannot be compared to each other 199135def4c9d5fb52e0eb2cb4fa7d8d10618d7e8baaElliott Hughes * using the given {@code Comparator}. 1992f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws IllegalArgumentException 1993adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start > end}. 1994f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ArrayIndexOutOfBoundsException 1995adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if {@code start < 0} or {@code end > array.length}. 1996adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 1997fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes public static <T> void sort(T[] array, int start, int end, Comparator<? super T> comparator) { 1998adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TimSort.sort(array, start, end, comparator); 1999adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2000adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2001adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2002adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Sorts the specified array using the specified {@code Comparator}. All elements 2003adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * must be comparable to each other without a {@code ClassCastException} being thrown. 2004f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2005f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @throws ClassCastException 2006adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * if elements in the array cannot be compared to each other 2007adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * using the {@code Comparator}. 2008adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2009adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static <T> void sort(T[] array, Comparator<? super T> comparator) { 2010adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project TimSort.sort(array, comparator); 2011adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2012adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2013adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2014adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a {@code String} representation of the {@code boolean[]} passed. 20151d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * The result is surrounded by brackets ({@code "[]"}), each 2016adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * element is converted to a {@code String} via the 20171d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * {@link String#valueOf(boolean)} and separated by {@code ", "}. 20181d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * If the array is {@code null}, then {@code "null"} is returned. 2019f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2020adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2021adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code boolean} array to convert. 2022adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} representation of {@code array}. 2023f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 2024adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2025adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toString(boolean[] array) { 2026adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 2027f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "null"; 2028adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2029adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array.length == 0) { 2030f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "[]"; 2031adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2032fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes StringBuilder sb = new StringBuilder(array.length * 7); 2033adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append('['); 2034adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[0]); 2035adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 1; i < array.length; i++) { 2036f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(", "); 2037adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[i]); 2038adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2039adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(']'); 2040adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 2041adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2042adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2043adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2044adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a {@code String} representation of the {@code byte[]} passed. The 20451d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * result is surrounded by brackets ({@code "[]"}), each element 2046adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is converted to a {@code String} via the {@link String#valueOf(int)} and 20471d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * separated by {@code ", "}. If the array is {@code null}, then 20481d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * {@code "null"} is returned. 2049f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2050adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2051adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code byte} array to convert. 2052adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} representation of {@code array}. 2053f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 2054adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2055adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toString(byte[] array) { 2056adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 2057f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "null"; 2058adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2059adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array.length == 0) { 2060f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "[]"; 2061adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2062fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes StringBuilder sb = new StringBuilder(array.length * 6); 2063adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append('['); 2064adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[0]); 2065adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 1; i < array.length; i++) { 2066f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(", "); 2067adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[i]); 2068adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2069adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(']'); 2070adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 2071adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2072adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2073adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2074adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a {@code String} representation of the {@code char[]} passed. The 20751d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * result is surrounded by brackets ({@code "[]"}), each element 2076adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is converted to a {@code String} via the {@link String#valueOf(char)} and 20771d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * separated by {@code ", "}. If the array is {@code null}, then 20781d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * {@code "null"} is returned. 2079f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2080adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2081adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code char} array to convert. 2082adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} representation of {@code array}. 2083f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 2084adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2085adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toString(char[] array) { 2086adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 2087f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "null"; 2088adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2089adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array.length == 0) { 2090f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "[]"; 2091adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2092fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes StringBuilder sb = new StringBuilder(array.length * 3); 2093adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append('['); 2094adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[0]); 2095adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 1; i < array.length; i++) { 2096f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(", "); 2097adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[i]); 2098adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2099adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(']'); 2100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 2101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a {@code String} representation of the {@code double[]} passed. 21051d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * The result is surrounded by brackets ({@code "[]"}), each 2106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * element is converted to a {@code String} via the 21071d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * {@link String#valueOf(double)} and separated by {@code ", "}. 21081d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * If the array is {@code null}, then {@code "null"} is returned. 2109f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code double} array to convert. 2112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} representation of {@code array}. 2113f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 2114adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toString(double[] array) { 2116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 2117f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "null"; 2118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2119adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array.length == 0) { 2120f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "[]"; 2121adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2122fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes StringBuilder sb = new StringBuilder(array.length * 7); 2123adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append('['); 2124adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[0]); 2125adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 1; i < array.length; i++) { 2126f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(", "); 2127adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[i]); 2128adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2129adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(']'); 2130adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 2131adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2132adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2133adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2134adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a {@code String} representation of the {@code float[]} passed. 21351d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * The result is surrounded by brackets ({@code "[]"}), each 2136adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * element is converted to a {@code String} via the 21371d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * {@link String#valueOf(float)} and separated by {@code ", "}. 21381d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * If the array is {@code null}, then {@code "null"} is returned. 2139f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2140adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2141adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code float} array to convert. 2142adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} representation of {@code array}. 2143f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 2144adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2145adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toString(float[] array) { 2146adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 2147f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "null"; 2148adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2149adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array.length == 0) { 2150f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "[]"; 2151adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2152fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes StringBuilder sb = new StringBuilder(array.length * 7); 2153adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append('['); 2154adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[0]); 2155adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 1; i < array.length; i++) { 2156f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(", "); 2157adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[i]); 2158adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2159adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(']'); 2160adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 2161adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2162adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2163adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2164adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a {@code String} representation of the {@code int[]} passed. The 21651d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * result is surrounded by brackets ({@code "[]"}), each element 2166adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is converted to a {@code String} via the {@link String#valueOf(int)} and 21671d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * separated by {@code ", "}. If the array is {@code null}, then 21681d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * {@code "null"} is returned. 2169f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2170adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2171adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code int} array to convert. 2172adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} representation of {@code array}. 2173f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 2174adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2175adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toString(int[] array) { 2176adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 2177f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "null"; 2178adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2179adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array.length == 0) { 2180f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "[]"; 2181adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2182fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes StringBuilder sb = new StringBuilder(array.length * 6); 2183adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append('['); 2184adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[0]); 2185adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 1; i < array.length; i++) { 2186f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(", "); 2187adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[i]); 2188adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2189adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(']'); 2190adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 2191adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2192adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2193adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2194adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a {@code String} representation of the {@code long[]} passed. The 21951d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * result is surrounded by brackets ({@code "[]"}), each element 2196adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * is converted to a {@code String} via the {@link String#valueOf(long)} and 21971d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * separated by {@code ", "}. If the array is {@code null}, then 21981d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * {@code "null"} is returned. 2199f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2200adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2201adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code long} array to convert. 2202adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} representation of {@code array}. 2203f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 2204adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2205adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toString(long[] array) { 2206adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 2207f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "null"; 2208adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2209adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array.length == 0) { 2210f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "[]"; 2211adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2212fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes StringBuilder sb = new StringBuilder(array.length * 6); 2213adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append('['); 2214adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[0]); 2215adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 1; i < array.length; i++) { 2216f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(", "); 2217adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[i]); 2218adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2219adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(']'); 2220adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 2221adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2222adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2223adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2224adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a {@code String} representation of the {@code short[]} passed. 22251d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * The result is surrounded by brackets ({@code "[]"}), each 2226adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * element is converted to a {@code String} via the 22271d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * {@link String#valueOf(int)} and separated by {@code ", "}. If 22281d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * the array is {@code null}, then {@code "null"} is returned. 2229f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2230adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2231adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code short} array to convert. 2232adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} representation of {@code array}. 2233f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 2234adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2235adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toString(short[] array) { 2236adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 2237f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "null"; 2238adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2239adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array.length == 0) { 2240f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "[]"; 2241adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2242fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes StringBuilder sb = new StringBuilder(array.length * 6); 2243adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append('['); 2244adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[0]); 2245adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 1; i < array.length; i++) { 2246f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(", "); 2247adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[i]); 2248adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2249adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(']'); 2250adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 2251adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2252adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2253adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2254adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a {@code String} representation of the {@code Object[]} passed. 22551d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * The result is surrounded by brackets ({@code "[]"}), each 2256adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * element is converted to a {@code String} via the 22571d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * {@link String#valueOf(Object)} and separated by {@code ", "}. 22581d58625189328f29c10fa98d52512ee6cf8cc641Ben Dodson * If the array is {@code null}, then {@code "null"} is returned. 2259f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2260adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2261adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Object} array to convert. 2262adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} representation of {@code array}. 2263f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 2264adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2265adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String toString(Object[] array) { 2266adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 2267f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "null"; 2268adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2269adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array.length == 0) { 2270f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "[]"; 2271adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2272fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes StringBuilder sb = new StringBuilder(array.length * 7); 2273adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append('['); 2274adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[0]); 2275adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 1; i < array.length; i++) { 2276f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(", "); 2277adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[i]); 2278adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2279adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(']'); 2280adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return sb.toString(); 2281adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2282adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2283adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2284adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Creates a <i>"deep"</i> {@code String} representation of the 2285adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code Object[]} passed, such that if the array contains other arrays, 2286adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code String} representation of those arrays is generated as well. 2287adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * <p> 2288adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * If any of the elements are primitive arrays, the generation is delegated 2289adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * to the other {@code toString} methods in this class. If any element 2290adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * contains a reference to the original array, then it will be represented 2291adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * as {@code "[...]"}. If an element is an {@code Object[]}, then its 2292adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * representation is generated by a recursive call to this method. All other 2293adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * elements are converted via the {@link String#valueOf(Object)} method. 2294f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2295adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2296adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Object} array to convert. 2297adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the {@code String} representation of {@code array}. 2298f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * @since 1.5 2299adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2300adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project public static String deepToString(Object[] array) { 2301283b3a99b7c7135db1d8a217629a76cf17ff0b7eJoshua Bloch // Special case null to prevent NPE 2302283b3a99b7c7135db1d8a217629a76cf17ff0b7eJoshua Bloch if (array == null) { 2303f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes return "null"; 2304283b3a99b7c7135db1d8a217629a76cf17ff0b7eJoshua Bloch } 2305adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // delegate this to the recursive method 2306fb0ec0e650bf8be35acb0d47da0311a7c446aa33Elliott Hughes StringBuilder buf = new StringBuilder(array.length * 9); 2307283b3a99b7c7135db1d8a217629a76cf17ff0b7eJoshua Bloch deepToStringImpl(array, new Object[] { array }, buf); 2308283b3a99b7c7135db1d8a217629a76cf17ff0b7eJoshua Bloch return buf.toString(); 2309adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2310adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2311adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2312adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Implementation method used by {@link #deepToString(Object[])}. 2313f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2314adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2315adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code Object[]} to dive into. 2316adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param origArrays 2317adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the original {@code Object[]}; used to test for self 2318adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * references. 2319adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param sb 2320adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * the {@code StringBuilder} instance to append to or 2321adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@code null} one hasn't been created yet. 2322adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return the result. 2323adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @see #deepToString(Object[]) 2324adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2325283b3a99b7c7135db1d8a217629a76cf17ff0b7eJoshua Bloch private static void deepToStringImpl(Object[] array, Object[] origArrays, 2326adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project StringBuilder sb) { 2327adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (array == null) { 2328f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append("null"); 2329283b3a99b7c7135db1d8a217629a76cf17ff0b7eJoshua Bloch return; 2330adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2331adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2332adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append('['); 2333adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2334adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (int i = 0; i < array.length; i++) { 2335adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (i != 0) { 2336f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append(", "); 2337adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2338adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // establish current element 2339adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object elem = array[i]; 2340adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (elem == null) { 2341adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // element is null 2342f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append("null"); 2343adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 2344adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // get the Class of the current element 2345adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?> elemClass = elem.getClass(); 2346adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (elemClass.isArray()) { 2347adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // element is an array type 2348adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2349adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // get the declared Class of the array (element) 2350adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Class<?> elemElemClass = elemClass.getComponentType(); 2351adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (elemElemClass.isPrimitive()) { 2352adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // element is a primitive array 2353adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (boolean.class.equals(elemElemClass)) { 2354adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(toString((boolean[]) elem)); 2355adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (byte.class.equals(elemElemClass)) { 2356adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(toString((byte[]) elem)); 2357adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (char.class.equals(elemElemClass)) { 2358adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(toString((char[]) elem)); 2359adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (double.class.equals(elemElemClass)) { 2360adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(toString((double[]) elem)); 2361adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (float.class.equals(elemElemClass)) { 2362adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(toString((float[]) elem)); 2363adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (int.class.equals(elemElemClass)) { 2364adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(toString((int[]) elem)); 2365adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (long.class.equals(elemElemClass)) { 2366adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(toString((long[]) elem)); 2367adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else if (short.class.equals(elemElemClass)) { 2368adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(toString((short[]) elem)); 2369adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 2370adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // no other possible primitives, so we assert that 2371adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project throw new AssertionError(); 2372adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2373adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 2374adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // element is an Object[], so we assert that 237567a368573213811c0037cb1b972a0d5fdb3eaf48Elliott Hughes // assert elem instanceof Object[]; 2376adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (deepToStringImplContains(origArrays, elem)) { 2377f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes sb.append("[...]"); 2378adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { 2379adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object[] newArray = (Object[]) elem; 2380adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object[] newOrigArrays = new Object[origArrays.length + 1]; 2381adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project System.arraycopy(origArrays, 0, newOrigArrays, 0, 2382adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project origArrays.length); 2383adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project newOrigArrays[origArrays.length] = newArray; 2384adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project // make the recursive call to this method 2385adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project deepToStringImpl(newArray, newOrigArrays, sb); 2386adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2387adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2388adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } else { // element is NOT an array, just an Object 2389adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(array[i]); 2390adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2391adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2392adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2393adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project sb.append(']'); 2394adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2395adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2396adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project /** 2397adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Utility method used to assist the implementation of 2398adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * {@link #deepToString(Object[])}. 2399f5597e626ecf7949d249dea08c1a2964d890ec11Jesse Wilson * 2400adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param origArrays 2401adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An array of Object[] references. 2402adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @param array 2403adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * An Object[] reference to look for in {@code origArrays}. 2404adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * @return A value of {@code true} if {@code array} is an 2405adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * element in {@code origArrays}. 2406adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 2407adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project private static boolean deepToStringImplContains(Object[] origArrays, 2408adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project Object array) { 2409adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (origArrays == null || origArrays.length == 0) { 2410adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 2411adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2412adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project for (Object element : origArrays) { 2413adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project if (element == array) { 2414adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return true; 2415adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2416adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2417adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project return false; 2418adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 2419055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2420055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2421055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies {@code newLength} elements from {@code original} into a new array. 2422055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code newLength} is greater than {@code original.length}, the result is padded 2423055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code false}. 2424055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2425055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2426055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newLength the length of the new array 2427055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2428055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NegativeArraySizeException if {@code newLength < 0} 2429055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2430055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2431055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2432055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static boolean[] copyOf(boolean[] original, int newLength) { 2433055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (newLength < 0) { 2434834ce234b54466ba230b3c7199d4363a837c5628Elliott Hughes throw new NegativeArraySizeException(Integer.toString(newLength)); 2435055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2436055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return copyOfRange(original, 0, newLength); 2437055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2438055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2439055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2440055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies {@code newLength} elements from {@code original} into a new array. 2441055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code newLength} is greater than {@code original.length}, the result is padded 2442055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code (byte) 0}. 2443055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2444055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2445055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newLength the length of the new array 2446055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2447055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NegativeArraySizeException if {@code newLength < 0} 2448055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2449055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2450055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2451055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static byte[] copyOf(byte[] original, int newLength) { 2452055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (newLength < 0) { 2453834ce234b54466ba230b3c7199d4363a837c5628Elliott Hughes throw new NegativeArraySizeException(Integer.toString(newLength)); 2454055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2455055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return copyOfRange(original, 0, newLength); 2456055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2457055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2458055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2459055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies {@code newLength} elements from {@code original} into a new array. 2460055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code newLength} is greater than {@code original.length}, the result is padded 2461055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code '\\u0000'}. 2462055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2463055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2464055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newLength the length of the new array 2465055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2466055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NegativeArraySizeException if {@code newLength < 0} 2467055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2468055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2469055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2470055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static char[] copyOf(char[] original, int newLength) { 2471055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (newLength < 0) { 2472834ce234b54466ba230b3c7199d4363a837c5628Elliott Hughes throw new NegativeArraySizeException(Integer.toString(newLength)); 2473055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2474055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return copyOfRange(original, 0, newLength); 2475055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2476055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2477055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2478055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies {@code newLength} elements from {@code original} into a new array. 2479055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code newLength} is greater than {@code original.length}, the result is padded 2480055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code 0.0d}. 2481055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2482055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2483055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newLength the length of the new array 2484055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2485055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NegativeArraySizeException if {@code newLength < 0} 2486055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2487055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2488055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2489055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static double[] copyOf(double[] original, int newLength) { 2490055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (newLength < 0) { 2491834ce234b54466ba230b3c7199d4363a837c5628Elliott Hughes throw new NegativeArraySizeException(Integer.toString(newLength)); 2492055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2493055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return copyOfRange(original, 0, newLength); 2494055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2495055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2496055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2497055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies {@code newLength} elements from {@code original} into a new array. 2498055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code newLength} is greater than {@code original.length}, the result is padded 2499055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code 0.0f}. 2500055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2501055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2502055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newLength the length of the new array 2503055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2504055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NegativeArraySizeException if {@code newLength < 0} 2505055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2506055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2507055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2508055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static float[] copyOf(float[] original, int newLength) { 2509055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (newLength < 0) { 2510834ce234b54466ba230b3c7199d4363a837c5628Elliott Hughes throw new NegativeArraySizeException(Integer.toString(newLength)); 2511055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2512055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return copyOfRange(original, 0, newLength); 2513055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2514055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2515055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2516055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies {@code newLength} elements from {@code original} into a new array. 2517055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code newLength} is greater than {@code original.length}, the result is padded 2518055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code 0}. 2519055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2520055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2521055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newLength the length of the new array 2522055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2523055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NegativeArraySizeException if {@code newLength < 0} 2524055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2525055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2526055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2527055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int[] copyOf(int[] original, int newLength) { 2528055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (newLength < 0) { 2529834ce234b54466ba230b3c7199d4363a837c5628Elliott Hughes throw new NegativeArraySizeException(Integer.toString(newLength)); 2530055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2531055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return copyOfRange(original, 0, newLength); 2532055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2533055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2534055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2535055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies {@code newLength} elements from {@code original} into a new array. 2536055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code newLength} is greater than {@code original.length}, the result is padded 2537055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code 0L}. 2538055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2539055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2540055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newLength the length of the new array 2541055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2542055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NegativeArraySizeException if {@code newLength < 0} 2543055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2544055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2545055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2546055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static long[] copyOf(long[] original, int newLength) { 2547055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (newLength < 0) { 2548834ce234b54466ba230b3c7199d4363a837c5628Elliott Hughes throw new NegativeArraySizeException(Integer.toString(newLength)); 2549055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2550055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return copyOfRange(original, 0, newLength); 2551055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2552055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2553055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2554055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies {@code newLength} elements from {@code original} into a new array. 2555055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code newLength} is greater than {@code original.length}, the result is padded 2556055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code (short) 0}. 2557055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2558055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2559055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newLength the length of the new array 2560055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2561055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NegativeArraySizeException if {@code newLength < 0} 2562055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2563055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2564055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2565055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static short[] copyOf(short[] original, int newLength) { 2566055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (newLength < 0) { 2567834ce234b54466ba230b3c7199d4363a837c5628Elliott Hughes throw new NegativeArraySizeException(Integer.toString(newLength)); 2568055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2569055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return copyOfRange(original, 0, newLength); 2570055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2571055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2572055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2573055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies {@code newLength} elements from {@code original} into a new array. 2574055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code newLength} is greater than {@code original.length}, the result is padded 2575055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code null}. 2576055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2577055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2578055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newLength the length of the new array 2579055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2580055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NegativeArraySizeException if {@code newLength < 0} 2581055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2582055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2583055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2584055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static <T> T[] copyOf(T[] original, int newLength) { 2585055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (original == null) { 2586d43b9ef11a1095967a3396b246639b563e1a4128Kenny Root throw new NullPointerException("original == null"); 2587055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2588055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (newLength < 0) { 2589834ce234b54466ba230b3c7199d4363a837c5628Elliott Hughes throw new NegativeArraySizeException(Integer.toString(newLength)); 2590055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2591055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return copyOfRange(original, 0, newLength); 2592055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2593055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2594055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2595055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies {@code newLength} elements from {@code original} into a new array. 2596055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code newLength} is greater than {@code original.length}, the result is padded 2597055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code null}. 2598055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2599055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2600055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newLength the length of the new array 2601055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param newType the class of the new array 2602055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2603055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NegativeArraySizeException if {@code newLength < 0} 2604055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2605055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayStoreException if a value in {@code original} is incompatible with T 2606055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2607055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2608055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static <T, U> T[] copyOf(U[] original, int newLength, Class<? extends T[]> newType) { 2609055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes // We use the null pointer check in copyOfRange for exception priority compatibility. 2610055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (newLength < 0) { 2611834ce234b54466ba230b3c7199d4363a837c5628Elliott Hughes throw new NegativeArraySizeException(Integer.toString(newLength)); 2612055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2613055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return copyOfRange(original, 0, newLength, newType); 2614055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2615055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2616055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2617055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies elements from {@code original} into a new array, from indexes start (inclusive) to 2618055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * end (exclusive). The original order of elements is preserved. 2619055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code end} is greater than {@code original.length}, the result is padded 2620055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code false}. 2621055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2622055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2623055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param start the start index, inclusive 2624055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param end the end index, exclusive 2625055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2626055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code start < 0 || start > original.length} 2627055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code start > end} 2628055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2629055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2630055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2631055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static boolean[] copyOfRange(boolean[] original, int start, int end) { 2632055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start > end) { 2633055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 2634055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2635055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int originalLength = original.length; 2636055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start < 0 || start > originalLength) { 2637055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 2638055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2639055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int resultLength = end - start; 2640055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int copyLength = Math.min(resultLength, originalLength - start); 2641055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes boolean[] result = new boolean[resultLength]; 2642055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes System.arraycopy(original, start, result, 0, copyLength); 2643055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return result; 2644055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2645055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2646055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2647055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies elements from {@code original} into a new array, from indexes start (inclusive) to 2648055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * end (exclusive). The original order of elements is preserved. 2649055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code end} is greater than {@code original.length}, the result is padded 2650055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code (byte) 0}. 2651055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2652055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2653055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param start the start index, inclusive 2654055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param end the end index, exclusive 2655055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2656055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code start < 0 || start > original.length} 2657055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code start > end} 2658055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2659055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2660055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2661055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static byte[] copyOfRange(byte[] original, int start, int end) { 2662055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start > end) { 2663055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 2664055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2665055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int originalLength = original.length; 2666055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start < 0 || start > originalLength) { 2667055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 2668055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2669055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int resultLength = end - start; 2670055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int copyLength = Math.min(resultLength, originalLength - start); 2671055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes byte[] result = new byte[resultLength]; 2672055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes System.arraycopy(original, start, result, 0, copyLength); 2673055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return result; 2674055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2675055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2676055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2677055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies elements from {@code original} into a new array, from indexes start (inclusive) to 2678055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * end (exclusive). The original order of elements is preserved. 2679055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code end} is greater than {@code original.length}, the result is padded 2680055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code '\\u0000'}. 2681055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2682055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2683055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param start the start index, inclusive 2684055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param end the end index, exclusive 2685055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2686055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code start < 0 || start > original.length} 2687055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code start > end} 2688055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2689055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2690055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2691055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static char[] copyOfRange(char[] original, int start, int end) { 2692055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start > end) { 2693055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 2694055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2695055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int originalLength = original.length; 2696055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start < 0 || start > originalLength) { 2697055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 2698055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2699055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int resultLength = end - start; 2700055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int copyLength = Math.min(resultLength, originalLength - start); 2701055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes char[] result = new char[resultLength]; 2702055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes System.arraycopy(original, start, result, 0, copyLength); 2703055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return result; 2704055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2705055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2706055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2707055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies elements from {@code original} into a new array, from indexes start (inclusive) to 2708055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * end (exclusive). The original order of elements is preserved. 2709055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code end} is greater than {@code original.length}, the result is padded 2710055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code 0.0d}. 2711055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2712055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2713055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param start the start index, inclusive 2714055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param end the end index, exclusive 2715055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2716055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code start < 0 || start > original.length} 2717055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code start > end} 2718055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2719055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2720055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2721055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static double[] copyOfRange(double[] original, int start, int end) { 2722055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start > end) { 2723055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 2724055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2725055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int originalLength = original.length; 2726055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start < 0 || start > originalLength) { 2727055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 2728055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2729055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int resultLength = end - start; 2730055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int copyLength = Math.min(resultLength, originalLength - start); 2731055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes double[] result = new double[resultLength]; 2732055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes System.arraycopy(original, start, result, 0, copyLength); 2733055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return result; 2734055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2735055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2736055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2737055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies elements from {@code original} into a new array, from indexes start (inclusive) to 2738055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * end (exclusive). The original order of elements is preserved. 2739055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code end} is greater than {@code original.length}, the result is padded 2740055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code 0.0f}. 2741055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2742055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2743055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param start the start index, inclusive 2744055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param end the end index, exclusive 2745055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2746055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code start < 0 || start > original.length} 2747055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code start > end} 2748055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2749055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2750055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2751055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static float[] copyOfRange(float[] original, int start, int end) { 2752055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start > end) { 2753055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 2754055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2755055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int originalLength = original.length; 2756055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start < 0 || start > originalLength) { 2757055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 2758055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2759055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int resultLength = end - start; 2760055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int copyLength = Math.min(resultLength, originalLength - start); 2761055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes float[] result = new float[resultLength]; 2762055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes System.arraycopy(original, start, result, 0, copyLength); 2763055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return result; 2764055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2765055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2766055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2767055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies elements from {@code original} into a new array, from indexes start (inclusive) to 2768055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * end (exclusive). The original order of elements is preserved. 2769055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code end} is greater than {@code original.length}, the result is padded 2770055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code 0}. 2771055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2772055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2773055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param start the start index, inclusive 2774055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param end the end index, exclusive 2775055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2776055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code start < 0 || start > original.length} 2777055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code start > end} 2778055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2779055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2780055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2781055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static int[] copyOfRange(int[] original, int start, int end) { 2782055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start > end) { 2783055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 2784055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2785055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int originalLength = original.length; 2786055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start < 0 || start > originalLength) { 2787055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 2788055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2789055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int resultLength = end - start; 2790055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int copyLength = Math.min(resultLength, originalLength - start); 2791055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int[] result = new int[resultLength]; 2792055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes System.arraycopy(original, start, result, 0, copyLength); 2793055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return result; 2794055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2795055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2796055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2797055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies elements from {@code original} into a new array, from indexes start (inclusive) to 2798055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * end (exclusive). The original order of elements is preserved. 2799055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code end} is greater than {@code original.length}, the result is padded 2800055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code 0L}. 2801055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2802055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2803055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param start the start index, inclusive 2804055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param end the end index, exclusive 2805055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2806055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code start < 0 || start > original.length} 2807055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code start > end} 2808055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2809055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2810055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2811055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static long[] copyOfRange(long[] original, int start, int end) { 2812055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start > end) { 2813055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 2814055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2815055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int originalLength = original.length; 2816055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start < 0 || start > originalLength) { 2817055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 2818055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2819055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int resultLength = end - start; 2820055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int copyLength = Math.min(resultLength, originalLength - start); 2821055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes long[] result = new long[resultLength]; 2822055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes System.arraycopy(original, start, result, 0, copyLength); 2823055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return result; 2824055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2825055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2826055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2827055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies elements from {@code original} into a new array, from indexes start (inclusive) to 2828055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * end (exclusive). The original order of elements is preserved. 2829055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code end} is greater than {@code original.length}, the result is padded 2830055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code (short) 0}. 2831055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2832055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2833055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param start the start index, inclusive 2834055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param end the end index, exclusive 2835055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2836055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code start < 0 || start > original.length} 2837055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code start > end} 2838055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2839055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2840055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2841055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static short[] copyOfRange(short[] original, int start, int end) { 2842055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start > end) { 2843055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 2844055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2845055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int originalLength = original.length; 2846055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start < 0 || start > originalLength) { 2847055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 2848055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2849055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int resultLength = end - start; 2850055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int copyLength = Math.min(resultLength, originalLength - start); 2851055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes short[] result = new short[resultLength]; 2852055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes System.arraycopy(original, start, result, 0, copyLength); 2853055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return result; 2854055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2855055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2856055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2857055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies elements from {@code original} into a new array, from indexes start (inclusive) to 2858055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * end (exclusive). The original order of elements is preserved. 2859055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code end} is greater than {@code original.length}, the result is padded 2860055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code null}. 2861055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2862055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2863055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param start the start index, inclusive 2864055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param end the end index, exclusive 2865055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2866055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code start < 0 || start > original.length} 2867055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code start > end} 2868055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2869055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2870055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2871055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes @SuppressWarnings("unchecked") 2872055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static <T> T[] copyOfRange(T[] original, int start, int end) { 2873055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int originalLength = original.length; // For exception priority compatibility. 2874055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start > end) { 2875055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 2876055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2877055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start < 0 || start > originalLength) { 2878055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 2879055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2880055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int resultLength = end - start; 2881055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int copyLength = Math.min(resultLength, originalLength - start); 2882055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes T[] result = (T[]) Array.newInstance(original.getClass().getComponentType(), resultLength); 2883055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes System.arraycopy(original, start, result, 0, copyLength); 2884055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return result; 2885055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2886055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes 2887055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes /** 2888055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * Copies elements from {@code original} into a new array, from indexes start (inclusive) to 2889055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * end (exclusive). The original order of elements is preserved. 2890055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * If {@code end} is greater than {@code original.length}, the result is padded 2891055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * with the value {@code null}. 2892055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * 2893055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param original the original array 2894055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param start the start index, inclusive 2895055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @param end the end index, exclusive 2896055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @return the new array 2897055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayIndexOutOfBoundsException if {@code start < 0 || start > original.length} 2898055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws IllegalArgumentException if {@code start > end} 2899055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws NullPointerException if {@code original == null} 2900055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @throws ArrayStoreException if a value in {@code original} is incompatible with T 2901055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes * @since 1.6 2902055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes */ 2903055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes @SuppressWarnings("unchecked") 2904055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes public static <T, U> T[] copyOfRange(U[] original, int start, int end, Class<? extends T[]> newType) { 2905055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start > end) { 2906055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new IllegalArgumentException(); 2907055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2908055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int originalLength = original.length; 2909055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes if (start < 0 || start > originalLength) { 2910055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes throw new ArrayIndexOutOfBoundsException(); 2911055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2912055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int resultLength = end - start; 2913055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes int copyLength = Math.min(resultLength, originalLength - start); 2914055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes T[] result = (T[]) Array.newInstance(newType.getComponentType(), resultLength); 2915055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes System.arraycopy(original, start, result, 0, copyLength); 2916055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes return result; 2917055c2521fc7776a0651de9be5be0fbbd2b312e7bElliott Hughes } 2918adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 2919