删除数组中一个或者多个连续的元素

本文允许转载,但请标明出处:, 版权所有

参考StringBuffer的底层源码实现:

public final class StringBuffer extends AbstractStringBuilderimplements java.io.Serializable, CharSequence

<span style="font-size:14px;">char[] value;int count;public AbstractStringBuilder delete(int start, int end) {if (start < 0)throw new StringIndexOutOfBoundsException(start);if (end > count)end = count;if (start > end)throw new StringIndexOutOfBoundsException();int len = end – start;if (len > 0) {System.arraycopy(value, start+len, value, start, count-end);count -= len;}return this;}</span>本文允许转载,但请标明出处:, 版权所有

策略解析:

<span style="font-size:14px;">Test System.arraycopy()方法:String[] array1 = { "1", "2", "3", "4", "5" };//System.arraycopy(value, start+len, value, start, count-end); //System.arraycopy(src, srcPos, dest, destPos, length);System.arraycopy(array1, 4, array1, 3,1);//从索引为4的元素开始,替换了从起始索引为3的元素,替换长度为1printArray(array1);//1 2 3 5 5</span>本文允许转载,但请标明出处:, 版权所有

分析count -= len;

数组元素替换之后,就变成12355,

count = 源数组的元素个数

len = 我们要替换的末索引-始索引 = (期望被删除的元素的个数)

count -= len; // 表示数组被删除后,长度减少了len个。所以count -= len;

12355 取 4个长度。。就是1235,那么看结果,4已经被删除掉了。。。

再说System.arraycopy(src, srcPos, dest, destPos, length);这个方法

public static native void arraycopy(Object src, int srcPos,

Object dest, int destPos,

int length);

看见native了,不用多讲了,再底层就是C++了。API解读完了。

删除元素,,就是把即将被删除元素的后边的元素往前挪了END – START个位置。然后按长度取就可以了。

版权声明:本文为博主原创文章,未经博主允许不得转载。

有了你,我不再作孤飞于蓝天的雄鹰,

删除数组中一个或者多个连续的元素

相关文章:

你感兴趣的文章:

标签云: