Mega Code Archive

 
Categories / Java / Collections Data Structure
 

Produces a new array containing the elements between the start and end indices

import java.lang.reflect.Array; /*   * 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.  *  *  */ /**  * @author Stephen Colebourne  * @author Moritz Petersen  * @author <a href="mailto:fredrik@westermarck.com">Fredrik Westermarck</a>  * @author Nikolay Metchev  * @author Matthew Hawthorne  * @author Tim O'Brien  * @author Pete Gieser  * @author Gary Gregory  * @author <a href="mailto:equinus100@hotmail.com">Ashwin S</a>  * @author Maarten Coene  * @since 2.0  * @version $Id: ArrayUtils.java 632503 2008-03-01 00:21:52Z ggregory $  */ public class Main {   // Subarrays   //-----------------------------------------------------------------------   /**    * <p>Produces a new array containing the elements between    * the start and end indices.</p>    *    * <p>The start index is inclusive, the end index exclusive.    * Null array input produces null output.</p>    *    * <p>The component type of the subarray is always the same as    * that of the input array. Thus, if the input is an array of type    * <code>Date</code>, the following usage is envisaged:</p>    *    * <pre>    * Date[] someDates = (Date[])ArrayUtils.subarray(allDates, 2, 5);    * </pre>    *    * @param array  the array    * @param startIndexInclusive  the starting index. Undervalue (&lt;0)    *      is promoted to 0, overvalue (&gt;array.length) results    *      in an empty array.    * @param endIndexExclusive  elements up to endIndex-1 are present in the    *      returned subarray. Undervalue (&lt; startIndex) produces    *      empty array, overvalue (&gt;array.length) is demoted to    *      array length.    * @return a new array containing the elements between    *      the start and end indices.    * @since 2.1    */   public static Object[] subarray(Object[] array, int startIndexInclusive, int endIndexExclusive) {       if (array == null) {           return null;       }       if (startIndexInclusive < 0) {           startIndexInclusive = 0;       }       if (endIndexExclusive > array.length) {           endIndexExclusive = array.length;       }       int newSize = endIndexExclusive - startIndexInclusive;       Class type = array.getClass().getComponentType();       if (newSize <= 0) {           return (Object[]) Array.newInstance(type, 0);       }       Object[] subarray = (Object[]) Array.newInstance(type, newSize);       System.arraycopy(array, startIndexInclusive, subarray, 0, newSize);       return subarray;   } }