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

本文允许转载,但请标明出处: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个位置。然后按长度取就可以了。

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

时间: 2024-11-08 23:24:15

删除数组中一个或者多个连续的元素的相关文章

算法题:找出一个数组中相加值最大的连续序列元素

package arithmetic; /** * @author SHI * 求一个数组中相加值最大的连续序列元素 */ public class MaxSequence { public static void main(String[] args) { int[] a=new int[]{-2,9,-3,4,-6,7,-6,4}; findBigSequence(a); } /** * 思想: (1)计算出该数组的所有元素和,假设该值为最大 * (2)从数组下标1到a.length-1依次

更好列表页中一个航班.先unset删除数组中一个键值对,再追加,最后按键排序

<?php $arr = array( '0' => array('item' => array( 'aa' => 'aaa', 'bb' => 'bbb' )), '1' => array('item' => array( 'cc' => 'ccc', 'dd' => 'ddd' )), '2' => array('item' => array( 'ee' => 'eee', 'ff' => 'fff' ))); echo '

php删除数组中相同的元素,只保留一个相同元素

<?php// 删除数组中相同元素,只保留一个相同元素function formatArray($array){sort($array);$tem = ”;$temarray = array();$j = 0;for($i=0;$i<count($array);$i++){if($array[$i]!=$tem){$temar(www.111cn.net)ray[$j] = $array[$i];$j++;}$tem = $array[$i];}return $temarray;}//测试 调

C#如何删除数组中的一个元素

C#如何删除数组中的一个元素,剩余的元素组成新数组,数组名不变double[] arr = new double[n];需要删除的是第m+1个数据arr[m]求新数组arr.(新数组arr包含n-1个元素)m,n数值已知 double[] arr = new double[50]; List<double> list = arr.ToList(); list.RemoveAt(5+1); double[] newarr = list.ToArray(); 转:http://www.zybang

(实用篇)PHP中unset,array_splice删除数组中元素的区别

php中删除数组元素是非常的简单的,但有时删除数组需要对索引进行一些排序要求我们会使用到相关的函数,这里我们来介绍使用unset,array_splice删除数组中的元素区别吧 如果要在某个数组中删除一个元素,可以直接用的unset,但是数组的索引不会重排: <?php $arr = array('a','b','c','d'); unset($arr[1]); print_r($arr); ?> 结果是: Array ( [0] => a [2] => c [3] => d

删除数组中某个元素

需求:已知一个数组,删除其中某个元素,其它向左移,最后一位补null值 分析: 1.找出要删除元素的下标,找个变量接收 2.此位置元素后面的元素依次向左移一位 3.补齐最后一位赋值null 4.输出新数组 /** * */ package com.cn.u4; /** * @author Administrator *删除数组中某个元素值 */ public class DelArray { public static void main(String[] args) { //定义数组 Stri

约瑟夫问题 算法很简单保证每隔人都能看懂用数组实现 利用循环删除数组中的元素

#include<iostream> using namespace std; const int size = 1000; void ArrDel() { int arr[size]; //循环结束标志,一直循环到数组中只剩下最后一个元素结束 int currentNum = size; int count = 0; for (int k = 0; k < size; k++) { arr[k] = k; } //currentNum==1表示数组中只剩下最后一个元素 是循环结束的标志

JS中删除数组中元素的几种方法

1.删除数组中的最后一个元素: 1 <script> 2 // 首先定义一个数组 3 var arr = [1,2,3,4,5]; 4 // 输出数组 5 console.log(arr);//结果为[1,2,3,4,5] 6 // 调用pop 方法 7 arr.pop(); 8 // 再次输出 9 console.log(arr);//结果为[1,2,3,4] 10 </script> 使用pop()方法只能删除数组中的最后一个元素. 2.删除数组中的第一个元素: 1 <s

【LeetCode-面试算法经典-Java实现】【027-Remove Element(删除数组中指定的元素)】

[027-Remove Element(删除数组中的元素)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given an array and a value, remove all instances of that value in place and return the new length. The order of elements can be changed. It doesn't matter what you leave beyond the