Fix bug where add() didn't use array type

Remove unecessary calls to lastIndex() for performance


git-svn-id: https://svn.apache.org/repos/asf/jakarta/commons/proper/lang/trunk@137970 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Stephen Colebourne 2004-10-09 11:55:51 +00:00
parent 657eac9347
commit f4f34dc60a
2 changed files with 32 additions and 13 deletions

View File

@ -44,7 +44,7 @@ import org.apache.commons.lang.builder.ToStringStyle;
* @author <a href="mailto:equinus100@hotmail.com">Ashwin S</a>
* @author Maarten Coene
* @since 2.0
* @version $Id: ArrayUtils.java,v 1.47 2004/10/08 00:11:00 scolebourne Exp $
* @version $Id: ArrayUtils.java,v 1.48 2004/10/09 11:55:51 scolebourne Exp $
*/
public class ArrayUtils {
@ -2943,9 +2943,10 @@ public class ArrayUtils {
* @since 2.1
*/
public static Object[] add(Object[] array, Object element) {
Object newArray = copyArrayGrow1(array, element != null ? element.getClass() : Object.class);
Array.set(newArray, lastIndex(newArray), element);
return (Object[]) newArray;
Class type = (array != null ? array.getClass() : (element != null ? element.getClass() : Object.class));
Object[] newArray = (Object[]) copyArrayGrow1(array, type);
newArray[newArray.length - 1] = element;
return newArray;
}
/**
@ -2971,7 +2972,7 @@ public class ArrayUtils {
*/
public static boolean[] add(boolean[] array, boolean element) {
boolean[] newArray = (boolean[])copyArrayGrow1(array, Boolean.TYPE);
newArray[lastIndex(newArray)] = element;
newArray[newArray.length - 1] = element;
return newArray;
}
@ -2998,7 +2999,7 @@ public class ArrayUtils {
*/
public static byte[] add(byte[] array, byte element) {
byte[] newArray = (byte[])copyArrayGrow1(array, Byte.TYPE);
newArray[lastIndex(newArray)] = element;
newArray[newArray.length - 1] = element;
return newArray;
}
@ -3025,7 +3026,7 @@ public class ArrayUtils {
*/
public static char[] add(char[] array, char element) {
char[] newArray = (char[])copyArrayGrow1(array, Character.TYPE);
newArray[lastIndex(newArray)] = element;
newArray[newArray.length - 1] = element;
return newArray;
}
@ -3052,7 +3053,7 @@ public class ArrayUtils {
*/
public static double[] add(double[] array, double element) {
double[] newArray = (double[])copyArrayGrow1(array, Double.TYPE);
newArray[lastIndex(newArray)] = element;
newArray[newArray.length - 1] = element;
return newArray;
}
@ -3079,7 +3080,7 @@ public class ArrayUtils {
*/
public static float[] add(float[] array, float element) {
float[] newArray = (float[])copyArrayGrow1(array, Float.TYPE);
newArray[lastIndex(newArray)] = element;
newArray[newArray.length - 1] = element;
return newArray;
}
@ -3106,7 +3107,7 @@ public class ArrayUtils {
*/
public static int[] add(int[] array, int element) {
int[] newArray = (int[])copyArrayGrow1(array, Integer.TYPE);
newArray[lastIndex(newArray)] = element;
newArray[newArray.length - 1] = element;
return newArray;
}
@ -3133,7 +3134,7 @@ public class ArrayUtils {
*/
public static long[] add(long[] array, long element) {
long[] newArray = (long[])copyArrayGrow1(array, Long.TYPE);
newArray[lastIndex(newArray)] = element;
newArray[newArray.length - 1] = element;
return newArray;
}
@ -3160,7 +3161,7 @@ public class ArrayUtils {
*/
public static short[] add(short[] array, short element) {
short[] newArray = (short[])copyArrayGrow1(array, Short.TYPE);
newArray[lastIndex(newArray)] = element;
newArray[newArray.length - 1] = element;
return newArray;
}

View File

@ -27,7 +27,7 @@ import junit.textui.TestRunner;
* Tests ArrayUtils add methods.
*
* @author Gary D. Gregory
* @version $Id: ArrayUtilsAddTest.java,v 1.3 2004/03/16 01:40:57 ggregory Exp $
* @version $Id: ArrayUtilsAddTest.java,v 1.4 2004/10/09 11:55:51 scolebourne Exp $
*/
public class ArrayUtilsAddTest extends TestCase {
public static void main(String[] args) {
@ -178,17 +178,35 @@ public class ArrayUtilsAddTest extends TestCase {
newArray = ArrayUtils.add((Object[])null, null);
assertTrue(Arrays.equals((new Object[]{null}), newArray));
assertEquals(Object.class, newArray.getClass().getComponentType());
newArray = ArrayUtils.add((Object[])null, "a");
assertTrue(Arrays.equals((new String[]{"a"}), newArray));
assertTrue(Arrays.equals((new Object[]{"a"}), newArray));
assertEquals(String.class, newArray.getClass().getComponentType());
String[] stringArray1 = new String[]{"a", "b", "c"};
newArray = ArrayUtils.add(stringArray1, null);
assertTrue(Arrays.equals((new String[]{"a", "b", "c", null}), newArray));
assertEquals(String.class, newArray.getClass().getComponentType());
newArray = ArrayUtils.add(stringArray1, "d");
assertTrue(Arrays.equals((new String[]{"a", "b", "c", "d"}), newArray));
assertEquals(String.class, newArray.getClass().getComponentType());
Number[] numberArray1 = new Number[]{new Integer(1), new Double(2)};
newArray = ArrayUtils.add(numberArray1, new Float(3));
assertTrue(Arrays.equals((new Number[]{new Integer(1), new Double(2), new Float(3)}), newArray));
assertEquals(Number.class, newArray.getClass().getComponentType());
numberArray1 = null;
newArray = ArrayUtils.add(numberArray1, new Float(3));
assertTrue(Arrays.equals((new Float[]{new Float(3)}), newArray));
assertEquals(Float.class, newArray.getClass().getComponentType());
numberArray1 = null;
newArray = ArrayUtils.add(numberArray1, null);
assertTrue(Arrays.equals((new Object[]{null}), newArray));
assertEquals(Object.class, newArray.getClass().getComponentType());
}
public void testAddObjectArrayToObjectArray() {