Java tutorial
//package com.java2s; /* * 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. */ import java.lang.reflect.Array; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Enumeration; public class Main { @SuppressWarnings("unchecked") public static <E> E[] toArray(Enumeration<E> enumeration, Class<E> type) { ArrayList<E> elements = new ArrayList<E>(); while (enumeration.hasMoreElements()) { elements.add(enumeration.nextElement()); } E[] array = (E[]) Array.newInstance(type, elements.size()); elements.toArray(array); return array; } @SuppressWarnings("unchecked") public static <E> E[] toArray(Collection<?> collection, Class<E> elementType) { return toArray(collection, elementType, false); } @SuppressWarnings("unchecked") public static <E> E[] toArray(Collection<?> collection, Class<E> elementType, boolean sort) { if (collection == null || collection.isEmpty()) return null; ArrayList arraylist = new ArrayList(collection); if (sort) { Collections.sort(arraylist); } E[] array = (E[]) Array.newInstance(elementType, arraylist.size()); arraylist.toArray(array); return array; } /** * <p>Copies the given array and adds the given element at the end of the new array.</p> * <p/> * <p>The new array contains the same elements of the input * array plus the given element in the last position. The component type of * the new array is the same as that of the input array.</p> * <p/> * <p>If the input array is <code>null</code>, a new one element array is returned * whose component type is the same as the element, unless the element itself is null, * in which case the return type is Object[]</p> * <p/> * <pre> * ArrayUtils.add(null, null) = [null] * ArrayUtils.add(null, "a") = ["a"] * ArrayUtils.add(["a"], null) = ["a", null] * ArrayUtils.add(["a"], "b") = ["a", "b"] * ArrayUtils.add(["a", "b"], "c") = ["a", "b", "c"] * </pre> * * @param array the array to "add" the element to, may be <code>null</code> * @param element the object to add, may be <code>null</code> * @return A new array containing the existing elements plus the new element * The returned array type will be that of the input array (unless null), * in which case it will have the same type as the element. * @since 2.1 */ public static Object[] add(Object[] array, Object element) { Class type; if (array != null) { type = array.getClass(); } else if (element != null) { type = element.getClass(); } else { type = Object.class; } Object[] newArray = (Object[]) copyArrayGrow1(array, type); newArray[newArray.length - 1] = element; return newArray; } /** * Returns a copy of the given array of size 1 greater than the argument. * The last value of the array is left to the default value. * * @param array The array to copy, must not be <code>null</code>. * @param newArrayComponentType If <code>array</code> is <code>null</code>, create a * size 1 array of this type. * @return A new copy of the array of size 1 greater than the input. */ private static Object copyArrayGrow1(Object array, Class newArrayComponentType) { if (array != null) { int arrayLength = Array.getLength(array); Object newArray = Array.newInstance(array.getClass().getComponentType(), arrayLength + 1); System.arraycopy(array, 0, newArray, 0, arrayLength); return newArray; } return Array.newInstance(newArrayComponentType, 1); } /** * <p>Returns the length of the specified array. * This method can deal with <code>Object</code> arrays and with primitive arrays.</p> * <p/> * <p>If the input array is <code>null</code>, <code>0</code> is returned.</p> * <p/> * <pre> * ArrayUtils.getLength(null) = 0 * ArrayUtils.getLength([]) = 0 * ArrayUtils.getLength([null]) = 1 * ArrayUtils.getLength([true, false]) = 2 * ArrayUtils.getLength([1, 2, 3]) = 3 * ArrayUtils.getLength(["a", "b", "c"]) = 3 * </pre> * * @param array the array to retrieve the length from, may be null * @return The length of the array, or <code>0</code> if the array is <code>null</code> * @throws IllegalArgumentException if the object arguement is not an array. * @since 2.1 */ public static int getLength(Object array) { if (array == null) { return 0; } return Array.getLength(array); } }