@SuppressWarnings({"unchecked"})
	public static <T> T[] replace(T[] buffer, int index, T... values) {
		if (isEmpty(values)) {
			return buffer;
		}
		if (isEmpty(buffer)) {
			return values;
		}
		if (index < 0) {
			// 从头部追加
			return insert(buffer, 0, values);
		}
		if (index >= buffer.length) {
			// 超出长度，尾部追加
			return append(buffer, values);
		}

		if (buffer.length >= values.length + index) {
			System.arraycopy(values, 0, buffer, index, values.length);
			return buffer;
		}

		// 替换长度大于原数组长度，新建数组
		int newArrayLength = index + values.length;
		final T[] result = newArray(buffer.getClass().getComponentType(), newArrayLength);
		System.arraycopy(buffer, 0, result, 0, index);
		System.arraycopy(values, 0, result, index, values.length);
		return result;
	}
@Test
	public void replaceTest() {
		String[] a = {"1", "2", "3", "4"};
		String[] b = {"a", "b", "c"};

		// 在小于0的位置，-1位置插入，返回b+a，新数组
		String[] result = ArrayUtil.replace(a, -1, b);
		assertArrayEquals(new String[]{"a", "b", "c", "1", "2", "3", "4"}, result);

		// 在第0个位置开始替换，返回a
		result = ArrayUtil.replace(ArrayUtil.clone(a), 0, b);
		assertArrayEquals(new String[]{"a", "b", "c", "4"}, result);

		// 在第1个位置替换，即"2"开始
		result = ArrayUtil.replace(ArrayUtil.clone(a), 1, b);
		assertArrayEquals(new String[]{"1", "a", "b", "c"}, result);

		// 在第2个位置插入，即"3"之后
		result = ArrayUtil.replace(ArrayUtil.clone(a), 2, b);
		assertArrayEquals(new String[]{"1", "2", "a", "b", "c"}, result);

		// 在第3个位置插入，即"4"之后
		result = ArrayUtil.replace(ArrayUtil.clone(a), 3, b);
		assertArrayEquals(new String[]{"1", "2", "3", "a", "b", "c"}, result);

		// 在第4个位置插入，数组长度为4，在索引4出替换即两个数组相加
		result = ArrayUtil.replace(ArrayUtil.clone(a), 4, b);
		assertArrayEquals(new String[]{"1", "2", "3", "4", "a", "b", "c"}, result);

		// 在大于3个位置插入，数组长度为4，即两个数组相加
		result = ArrayUtil.replace(ArrayUtil.clone(a), 5, b);
		assertArrayEquals(new String[]{"1", "2", "3", "4", "a", "b", "c"}, result);

		String[] e = null;
		String[] f = {"a", "b", "c"};

		// e为null 返回 f
		result = ArrayUtil.replace(e, -1, f);
		assertArrayEquals(f, result);

		String[] g = {"a", "b", "c"};
		String[] h = null;

		// h为null 返回 g
		result = ArrayUtil.replace(g, 0, h);
		assertArrayEquals(g, result);
	}