`
shenyu
  • 浏览: 123006 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Array 可变长一维数组

 
阅读更多

这是一个可变长数组,对外提供API主要有set,get,可以用它来替代原始数组,不用考虑空间的大小。

此数组是一维的,存放的内容是非负整数,可以考虑用Object,此处用int为的是看起来简单。

每次扩展的长度大体是原来数组长度的10%,也就是oldLenght + oldLength/10,truancate可以缩短数组长度,同时给客户一个减少数组实际占用空间的机会。

class Array {
	private int a[]  = new int[0];
	private int length = 0;
	private static final int WASTER_FACTOR = 10;

	void set(int num, int pos) {
		assert pos >= 0;
		if(pos >= a.length) changeCapacity(pos + getNewCount(a.length));
		if(pos >= length) length = pos + 1;
		a[pos] = num;
	}

	int get(int pos) {
		assert pos >= 0 && pos < length;
		return a[pos];
	}

	int getLength() {
		return length;
	}

	void truncate(int length) {
		assert length >= 0 && length < this.length;
		
		this.length = length;

		if(length > a.length - 2*getNewCount(a.length)) return;
		int[] temp = new int[a.length - getNewCount(a.length)];
		for(int i=0; i<temp.length; i++) {
			temp[i] = a[i];
		}
		a = temp;
	}

	private void changeCapacity(int length) {
		int[] temp = new int[length];
		for(int i=0; i<a.length; i++) {
			temp[i] = a[i];
		}
		a = temp;
	}

	private int getNewCount(int oldLength) {
		return oldLength < 100? WASTER_FACTOR : oldLength/WASTER_FACTOR;
		
	}
}
 

 

分享到:
评论

相关推荐

    一维数组 教案模板

    一维数组在内存中是连续存储的,这使得对数组元素的访问和操作变得高效。 **定义格式**: ```c 类型说明符 数组名[常量表达式]; ``` - **类型说明符**:指定数组中元素的数据类型,如`int`、`float`、`char`等。 - ...

    PHP基于array_unique实现二维数组去重

    首先,我们需要将二维数组转换为一维数组,这可以通过`implode`或`join`函数完成,然后使用`array_unique`去除重复的字符串,最后再将一维数组转换回二维。这里是一个例子: ```php function array_unique_fb($...

    变长数组编程

    1. 变长一维数组 在C++中,传统的数组在声明时需要指定大小,但变长数组可以在运行时根据用户输入或其他条件动态分配内存。以下是一个简单的示例: ```cpp int len; cin &gt;&gt; len; int *p = new int[len]; // ... ...

    TIA博途中数组Array【】的基本使用方法详解.docx

    - 例如,三维数组3D[0..2,0..3,0..4] of Int是一个3×4×5大小的Int数组。 - 3D[0]是一个4×5大小的二维Int数组。 - 3D[0,1]是一个5个元素的一维Int数组。 - 多维数组的下标也可以换成变量,例如3D[Tag_1,1]。 ...

    数据结构课程设计-二维数组

    二维数组可以被视为一维数组的数组,它由行和列组成,常被用来模拟表格数据。在C++中,二维数组的声明和初始化通常如下: ```cpp int array[行数][列数]; ``` 例如,一个3x3的二维数组可以这样声明: ```cpp int ...

    matlab 三维 数组教程

    例如,两个三维数组可以进行元素级别的加法、减法、乘法和除法,如`result = array1 + array2`。这使得对整个数据集进行计算变得十分便捷。 三维数组的可视化是分析数据的关键步骤。MATLAB提供了`volumeViewer`函数...

    C++中二维数组的动态分配

    #### 三、示例二:可变大小的二维数组 接下来,我们来看一个更复杂的例子,创建一个每一行大小不相同的二维数组: ```cpp #include using std::cin; using std::cout; using std::endl; int main() { int i, j;...

    动态定义一维、二维、三维数组.pdf

    首先,一维数组是最基础的数组类型,它可以存储一系列的数据元素。在C++中,可以使用`new`关键字动态分配一维数组的内存,并使用`delete[]`释放内存。例如,创建一个一维数组并初始化为随机数的代码如下: ```cpp #...

    c语言二维数组初始化.pdf

    二维数组由行和列组成,可以视为一维数组的数组。例如,一个 3 行 4 列的二维整型数组可以声明为 `int array[3][4];`。 - **数组的声明**:`int array[行数][列数];` - **元素访问**:`array[行索引][列索引]` ...

    IOS开发基础之二维数组详解

    在这个例子中,我们创建了一个可变数组`mulArrayD1`,然后在循环中动态添加每个一维数组`arrayD2`。同样,我们可以通过索引来访问这些元素: ```objc NSLog(@"array2d[2][1]:%@", mulArrayD1[2][1]); NSLog(@"array...

    php去除二维数组的重复项方法

    `array_unique()` 函数是PHP内建的一个非常有用的工具,它能帮助去除一维数组中的重复元素。然而,这个函数不适用于处理包含嵌套数组的情况。为了解决这个问题,我们需要自定义一个函数来去除二维数组的重复项。标题...

    python 去除二维数组/二维列表中的重复行方法

    首先,我们要理解为什么一维数组可以使用`numpy`的`unique()`函数来去除重复元素,但不能直接用于二维数组。`unique()`函数是为一维数组设计的,它无法识别二维数组中的行,因为它考虑的是单个元素而不是组合(如行...

    12道不错的数组例题

    - Java支持二维数组,可以看作是一组一维数组的集合。例如,`int[][] matrix = new int[3][4]`创建了一个3行4列的矩阵。 4. **数组排序**: - 可以使用Java内置的`Arrays.sort()`方法对数组进行升序或降序排序。...

    js一维数组、多维数组和对象的混合使用方法

    一维数组可以通过多种方式创建,包括使用new Array()构造函数、使用数组字面量或通过简洁数组字面量的方式。一维数组中的元素可以是不同类型的数据,如字符串、数字、对象等,这得益于JavaScript的弱类型检查特性。 ...

    关于js二维数组和多维数组的定义声明(详解)

    在JavaScript中,我们可以用以下方式定义一个空的一维数组: ```javascript var oneDimArray = []; ``` 如果要给一维数组赋值,我们需要确保数组已经创建,然后可以像下面这样操作: ```javascript oneDimArray[0...

    C/C++中传递多维数组的各种方法

    如果需要传递可变大小的数组或希望更灵活地管理内存,二级指针是一个更好的选择。 ### 结语 在 C/C++ 中,根据不同的需求选择合适的方法来传递多维数组至关重要。正确地理解和掌握数组和指针在函数参数中的行为,...

    什么是数组?matlab创建数组方法汇总

    1. 一维数组:一维数组是一系列元素按顺序排列的线性结构,类似于数学中的数列。在MATLAB中,创建一维数组有以下几种方式: - 手动初始化:直接用方括号`[]`列举元素,如`array = [1, 2, 3, 4, 5];` - 冒号运算符...

    定义JavaScript二维数组采用定义数组的数组来实现

    在这个例子中,`a` 是一个二维数组,它包含了三个一维数组,每个一维数组包含三个元素。 创建二维数组的一个常见方法是使用嵌套循环,特别是在需要填充特定数据时。下面的例子展示了如何创建一个8x8的二维数组,...

    基于流程图的算法原型设计工具 RAPTOR程序设计案例教程 03 数组(共46页).pptx

    2. **数组的扩展**:RAPTOR 支持可变长数组(VLA),这意味着可以在程序运行过程中扩展数组。当给数组元素赋值时,如果超过原有数组界限,系统会自动扩展数组以容纳新元素。 3. **数组的类型**:数组可以包含不同...

    数组 零基础学数据结构PPT学习教案.pptx

    一维数组的元素通常是原子类型,如整型、字符型或浮点型,而二维数组则可以看作是线性表的线性表,也就是表格形式,适用于处理矩阵或表格数据。 【数组的抽象数据类型】 抽象数据类型(ADT)是数组的一个理论模型,...

Global site tag (gtag.js) - Google Analytics