删除数组中一个或者多个连续的元素
2015-07-02 20:17
369 查看
本文允许转载,但请标明出处:/article/1547185.html, 版权所有
参考StringBuffer的底层源码实现:
public final class StringBuffer extends AbstractStringBuilder implements java.io.Serializable,
CharSequence
版权所有
策略解析:
本文允许转载,但请标明出处:/article/1547185.html, 版权所有
分析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个位置。然后按长度取就可以了。
参考StringBuffer的底层源码实现:
public final class StringBuffer extends AbstractStringBuilder implements 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>本文允许转载,但请标明出处:/article/1547185.html,
版权所有
策略解析:
<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的元素,替换长度为1 printArray(array1);//1 2 3 5 5</span>
本文允许转载,但请标明出处:/article/1547185.html, 版权所有
分析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个位置。然后按长度取就可以了。
相关文章推荐
- linux之cp/scp命令+scp命令详解
- [leetcode] 122.Best Time to Buy and Sell Stock II
- 设计模式——结构模型
- 《Java课程实习》日志(周一)
- ACM之路的高一下学期
- 一元多项式乘法字符运算(关联容器map)
- 为什么有些人用了1年就获得了你10年的能力
- NodeJS利用mongoose模糊查询MongoDB
- scala中的对象私有字段
- 贝叶斯方法及其应用(1)
- 查看linux安装系统时所使用的readhat还是centos
- sphinx转markdown
- 【剑指offer】面试题21:包含min函数的栈
- 委托与事件
- 排序算法总结---直接选择排序
- web开发概述
- 九九乘法表
- 熵的社会学意义
- 算法笔记——整数划分1
- Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or pat