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

简介: 本文允许转载,但请标明出处:http://blog.csdn.net/wanghantong/article/details/46730591, 版权所有 参考StringBuffer的底层源码实现: public final class StringBuffer  extends AbstractStringBuilder implements java.io.Seriali

本文允许转载,但请标明出处:http://blog.csdn.net/wanghantong/article/details/46730591, 版权所有


参考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>
本文允许转载,但请标明出处:http://blog.csdn.net/wanghantong/article/details/46730591, 版权所有

策略解析:
<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>

本文允许转载,但请标明出处:http://blog.csdn.net/wanghantong/article/details/46730591, 版权所有
分析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个位置。然后按长度取就可以了。

目录
相关文章
|
存储 中间件 开发工具
云计算的三个主要服务模型:IaaS、PaaS 和 SaaS
云计算的三个主要服务模型:IaaS、PaaS 和 SaaS
17145 0
|
XML 运维 监控
【共读】企业信息安全建设与运维指南(二)
【共读】企业信息安全建设与运维指南(二)
978 0
【共读】企业信息安全建设与运维指南(二)
|
开发工具 git
git push报错:The current branch master has no upstream branch
git push报错:The current branch master has no upstream branch
39639 0
git push报错:The current branch master has no upstream branch
|
Java 开发工具 开发者
IDEA中配置类与方法注释模板
IDEA是当前使用最为广泛的集成开发工具之一,其功能的多样性与便捷性为开发者在开发过程提供了很多方便。 我们在用IDEA创建java类和方法的时候,可以自动生成文档注释,便于代码的阅读与理解。
IDEA中配置类与方法注释模板
|
7月前
|
Linux Shell
问题记录:解决Linux登录故障,/etc/passwd配置受损该怎么操作
修复/etc/passwd文件是解决Linux登录故障的重要步骤。通过进入单用户模式、挂载文件系统、恢复或手动修复/etc/passwd文件,可以有效解决该问题。保持定期备份系统配置文件是预防此类问题的最佳实践。
226 5
|
JavaScript
Nodejs的模块化概述
详细解释Node.js的模块化概念,包括CommonJS规范、模块的引用、定义、标识,以及如何在Node.js中实现模块化,并通过示例代码展示了如何创建和使用模块,以及"module.exports"和"exports"的区别。
120 1
Nodejs的模块化概述
|
Docker 容器
求助: 运行模型时报错module 'megatron_util.mpu' has no attribute 'get_model_parallel_rank'
运行ZhipuAI/Multilingual-GLM-Summarization-zh的官方代码范例时,报错AttributeError: MGLMTextSummarizationPipeline: module 'megatron_util.mpu' has no attribute 'get_model_parallel_rank' 环境是基于ModelScope官方docker镜像,尝试了各个版本结果都是一样的。
554 5
|
机器学习/深度学习 数据采集 数据可视化
使用Python实现深度学习模型:智能交通信号优化
使用Python实现深度学习模型:智能交通信号优化
516 9
|
10月前
|
API
手机号段查询城市免费API接口教程
此接口用于根据手机号段查询相关信息,包括城市、运营商、区号等。支持POST和GET请求,需提供用户ID、KEY及手机号段前7位作为参数。返回数据包含状态码、信息提示及详细归属信息。示例请求地址:https://cn.apihz.cn/api/ip/haoduan.php?id=88888888&key=88888888&numbers=1321993。接口免费,建议使用个人ID与KEY以独享调用频次。
|
11月前
|
测试技术 数据安全/隐私保护
北邮人论坛登录页面测试用例
北邮人论坛登录页面测试用例
198 1