/* | |
* Licensed to the Apache Software Foundation (ASF) under one or more | |
* contributor license agreements. See the NOTICE file distributed with | |
* this work for additional information regarding copyright ownership. | |
* The ASF licenses this file to You under the Apache License, Version 2.0 | |
* (the "License"); you may not use this file except in compliance with | |
* the License. You may obtain a copy of the License at | |
* | |
* http://www.apache.org/licenses/LICENSE-2.0 | |
* | |
* Unless required by applicable law or agreed to in writing, software | |
* distributed under the License is distributed on an "AS IS" BASIS, | |
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
* See the License for the specific language governing permissions and | |
* limitations under the License. | |
*/ | |
package org.apache.commons.collections4; | |
/** | |
* <p> | |
* Operations on arrays, primitive arrays (like {@code int[]}) and primitive wrapper arrays (like {@code Integer[]}). | |
* </p> | |
* <p> | |
* This class tries to handle {@code null} input gracefully. An exception will not be thrown for a {@code null} array | |
* input. However, an Object array that contains a {@code null} element may throw an exception. Each method documents | |
* its behaviour. | |
* </p> | |
* <p> | |
* Package private, might move to an internal package if this needs to be public. | |
* </p> | |
* <p> | |
* #ThreadSafe# | |
* </p> | |
* | |
* @since 4.2 (Copied from Apache Commons Lang.) | |
* | |
*/ | |
class ArrayUtils { | |
/** | |
* The index value when an element is not found in a list or array: {@code -1}. This value is returned by methods in | |
* this class and can also be used in comparisons with values returned by various method from | |
* {@link java.util.List}. | |
*/ | |
static final int INDEX_NOT_FOUND = -1; | |
/** | |
* <p> | |
* Checks if the object is in the given array. | |
* </p> | |
* | |
* <p> | |
* The method returns {@code false} if a {@code null} array is passed in. | |
* </p> | |
* | |
* @param array | |
* the array to search through | |
* @param objectToFind | |
* the object to find | |
* @return {@code true} if the array contains the object | |
*/ | |
static boolean contains(final Object[] array, final Object objectToFind) { | |
return indexOf(array, objectToFind) != INDEX_NOT_FOUND; | |
} | |
/** | |
* <p> | |
* Finds the index of the given object in the array. | |
* </p> | |
* | |
* <p> | |
* This method returns {@link #INDEX_NOT_FOUND} ({@code -1}) for a {@code null} input array. | |
* </p> | |
* | |
* @param array | |
* the array to search through for the object, may be {@code null} | |
* @param objectToFind | |
* the object to find, may be {@code null} | |
* @return the index of the object within the array, {@link #INDEX_NOT_FOUND} ({@code -1}) if not found or | |
* {@code null} array input | |
*/ | |
static <T> int indexOf(final T[] array, final Object objectToFind) { | |
return indexOf(array, objectToFind, 0); | |
} | |
/** | |
* <p> | |
* Finds the index of the given object in the array starting at the given index. | |
* </p> | |
* | |
* <p> | |
* This method returns {@link #INDEX_NOT_FOUND} ({@code -1}) for a {@code null} input array. | |
* </p> | |
* | |
* <p> | |
* A negative startIndex is treated as zero. A startIndex larger than the array length will return | |
* {@link #INDEX_NOT_FOUND} ({@code -1}). | |
* </p> | |
* | |
* @param array | |
* the array to search through for the object, may be {@code null} | |
* @param objectToFind | |
* the object to find, may be {@code null} | |
* @param startIndex | |
* the index to start searching at | |
* @return the index of the object within the array starting at the index, {@link #INDEX_NOT_FOUND} ({@code -1}) if | |
* not found or {@code null} array input | |
*/ | |
static int indexOf(final Object[] array, final Object objectToFind, int startIndex) { | |
if (array == null) { | |
return INDEX_NOT_FOUND; | |
} | |
if (startIndex < 0) { | |
startIndex = 0; | |
} | |
if (objectToFind == null) { | |
for (int i = startIndex; i < array.length; i++) { | |
if (array[i] == null) { | |
return i; | |
} | |
} | |
} else { | |
for (int i = startIndex; i < array.length; i++) { | |
if (objectToFind.equals(array[i])) { | |
return i; | |
} | |
} | |
} | |
return INDEX_NOT_FOUND; | |
} | |
} |