array.java

来自「纯java操作系统jnode,安装简单和操作简单的个人使用的Java操作系统」· Java 代码 · 共 636 行 · 第 1/2 页

JAVA
636
字号
		if (array instanceof char[])
			return ((char[]) array)[index];
		return getShort(array, index);
	}

	/**
	 * Gets an element of a long array.
	 *
	 * @param array the array to access
	 * @param index the array index to access
	 * @return the long element at <code>array[index]</code>
	 * @throws IllegalArgumentException  if <code>array</code> is not a byte,
	 *         char, short, int, or long array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #get(Object, int)
	 */
	public static long getLong(Object array, int index) {
		if (array instanceof long[])
			return ((long[]) array)[index];
		return getInt(array, index);
	}

	/**
	 * Gets an element of a float array.
	 *
	 * @param array the array to access
	 * @param index the array index to access
	 * @return the float element at <code>array[index]</code>
	 * @throws IllegalArgumentException  if <code>array</code> is not a byte,
	 *         char, short, int, long, or float array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #get(Object, int)
	 */
	public static float getFloat(Object array, int index) {
		if (array instanceof float[])
			return ((float[]) array)[index];
		return getLong(array, index);
	}

	/**
	 * Gets an element of a double array.
	 *
	 * @param array the array to access
	 * @param index the array index to access
	 * @return the double element at <code>array[index]</code>
	 * @throws IllegalArgumentException  if <code>array</code> is not a byte,
	 *         char, short, int, long, float, or double array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #get(Object, int)
	 */
	public static double getDouble(Object array, int index) {
		if (array instanceof double[])
			return ((double[]) array)[index];
		return getFloat(array, index);
	}

	/**
	 * Sets an element of an array. If the array is primitive, then the new
	 * value is unwrapped and widened.
	 *
	 * @param array the array to set a value of
	 * @param index the array index to set the value to
	 * @param value the value to set
	 * @throws IllegalArgumentException if <code>array</code> is not an array,
	 *         or the array is primitive and unwrapping value fails, or the
	 *         value is not assignable to the array component type
	 * @throws NullPointerException if array is null, or if array is primitive
	 *         and value is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #setBoolean(Object, int, boolean)
	 * @see #setByte(Object, int, byte)
	 * @see #setChar(Object, int, char)
	 * @see #setShort(Object, int, short)
	 * @see #setInt(Object, int, int)
	 * @see #setLong(Object, int, long)
	 * @see #setFloat(Object, int, float)
	 * @see #setDouble(Object, int, double)
	 */
	public static void set(Object array, int index, Object value) {
		if (array instanceof Object[]) {
			// Too bad Sun won't let us throw the easier ArrayStoreException!
			if (!array.getClass().getComponentType().isInstance(value))
				throw new IllegalArgumentException();
			((Object[]) array)[index] = value;
		} else if (value instanceof Boolean)
			setBoolean(array, index, ((Boolean) value).booleanValue());
		else if (value instanceof Byte)
			setByte(array, index, ((Byte) value).byteValue());
		else if (value instanceof Character)
			setChar(array, index, ((Character) value).charValue());
		else if (value instanceof Short)
			setShort(array, index, ((Short) value).shortValue());
		else if (value instanceof Integer)
			setInt(array, index, ((Integer) value).intValue());
		else if (value instanceof Long)
			setLong(array, index, ((Long) value).longValue());
		else if (value instanceof Float)
			setFloat(array, index, ((Float) value).floatValue());
		else if (value instanceof Double)
			setDouble(array, index, ((Double) value).doubleValue());
		else if (array == null)
			throw new NullPointerException();
		else
			throw new IllegalArgumentException();
	}

	/**
	 * Sets an element of a boolean array.
	 *
	 * @param array the array to set a value of
	 * @param index the array index to set the value to
	 * @param value the value to set
	 * @throws IllegalArgumentException if <code>array</code> is not a boolean
	 *         array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #set(Object, int, Object)
	 */
	public static void setBoolean(Object array, int index, boolean value) {
		if (array instanceof boolean[])
			 ((boolean[]) array)[index] = value;
		else if (array == null)
			throw new NullPointerException();
		else
			throw new IllegalArgumentException();
	}

	/**
	 * Sets an element of a byte array.
	 *
	 * @param array the array to set a value of
	 * @param index the array index to set the value to
	 * @param value the value to set
	 * @throws IllegalArgumentException if <code>array</code> is not a byte,
	 *         short, int, long, float, or double array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #set(Object, int, Object)
	 */
	public static void setByte(Object array, int index, byte value) {
		if (array instanceof byte[])
			 ((byte[]) array)[index] = value;
		else
			setShort(array, index, value);
	}

	/**
	 * Sets an element of a char array.
	 *
	 * @param array the array to set a value of
	 * @param index the array index to set the value to
	 * @param value the value to set
	 * @throws IllegalArgumentException if <code>array</code> is not a char,
	 *         int, long, float, or double array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #set(Object, int, Object)
	 */
	public static void setChar(Object array, int index, char value) {
		if (array instanceof char[])
			 ((char[]) array)[index] = value;
		else
			setInt(array, index, value);
	}

	/**
	 * Sets an element of a short array.
	 *
	 * @param array the array to set a value of
	 * @param index the array index to set the value to
	 * @param value the value to set
	 * @throws IllegalArgumentException if <code>array</code> is not a short,
	 *         int, long, float, or double array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #set(Object, int, Object)
	 */
	public static void setShort(Object array, int index, short value) {
		if (array instanceof short[])
			 ((short[]) array)[index] = value;
		else
			setInt(array, index, value);
	}

	/**
	 * Sets an element of an int array.
	 *
	 * @param array the array to set a value of
	 * @param index the array index to set the value to
	 * @param value the value to set
	 * @throws IllegalArgumentException if <code>array</code> is not an int,
	 *         long, float, or double array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #set(Object, int, Object)
	 */
	public static void setInt(Object array, int index, int value) {
		if (array instanceof int[])
			 ((int[]) array)[index] = value;
		else
			setLong(array, index, value);
	}

	/**
	 * Sets an element of a long array.
	 *
	 * @param array the array to set a value of
	 * @param index the array index to set the value to
	 * @param value the value to set
	 * @throws IllegalArgumentException if <code>array</code> is not a long,
	 *         float, or double array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #set(Object, int, Object)
	 */
	public static void setLong(Object array, int index, long value) {
		if (array instanceof long[])
			 ((long[]) array)[index] = value;
		else
			setFloat(array, index, value);
	}

	/**
	 * Sets an element of a float array.
	 *
	 * @param array the array to set a value of
	 * @param index the array index to set the value to
	 * @param value the value to set
	 * @throws IllegalArgumentException if <code>array</code> is not a float
	 *         or double array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #set(Object, int, Object)
	 */
	public static void setFloat(Object array, int index, float value) {
		if (array instanceof float[])
			 ((float[]) array)[index] = value;
		else
			setDouble(array, index, value);
	}

	/**
	 * Sets an element of a double array.
	 *
	 * @param array the array to set a value of
	 * @param index the array index to set the value to
	 * @param value the value to set
	 * @throws IllegalArgumentException if <code>array</code> is not a double
	 *         array
	 * @throws NullPointerException if <code>array</code> is null
	 * @throws ArrayIndexOutOfBoundsException if <code>index</code> is out of
	 *         bounds
	 * @see #set(Object, int, Object)
	 */
	public static void setDouble(Object array, int index, double value) {
		if (array instanceof double[])
			 ((double[]) array)[index] = value;
		else if (array == null)
			throw new NullPointerException();
		else
			throw new IllegalArgumentException();
	}

	/**
	 * Dynamically and recursively create a multi-dimensioned array of objects.
	 *
	 * @param type guaranteed to be a valid object type
	 * @param dimensions the dimensions of the array
	 * @param index index of the current dimension to build
	 * @return the new multi-dimensioned array
	 * @throws NegativeArraySizeException if any entry of dimensions is negative
	 * @throws OutOfMemoryError if memory allocation fails
	 */
	// This would be faster if implemented natively, using the multianewarray
	// bytecode instead of this recursive call
	private static Object createMultiArray(Class type, int[] dimensions, int index) {
		if (index == 0)
			return newInstance(type, dimensions[0]);

		Object toAdd = createMultiArray(type, dimensions, index - 1);
		Class thisType = toAdd.getClass();
		Object[] retval = (Object[]) createObjectArray(thisType, dimensions[index]);
		if (dimensions[index] > 0)
			retval[0] = toAdd;
		int i = dimensions[index];
		while (--i > 0)
			retval[i] = createMultiArray(type, dimensions, index - 1);
		return retval;
	}

	/**
	 * Dynamically create an array of objects.
	 *
	 * @param type guaranteed to be a valid object type
	 * @param dim the length of the array
	 * @return the new array
	 * @throws NegativeArraySizeException if dim is negative
	 * @throws OutOfMemoryError if memory allocation fails
	 */
	private static Object createObjectArray(Class type, int dim) {
		return null;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?