当前位置:首页 > 开发 > 编程语言 > 编程 > 正文

自己的String动态数组

发表于: 2014-11-10   作者:宝剑锋梅花香   来源:转载   浏览:
摘要: 数组还是好说,学过一两门编程语言的就知道,需要注意的是数组声明时需要把大小给它定下来,比如声明一个字符串类型的数组:String str[]=new String[10];    但是问题就来了,每次都是大小确定的数组,我需要数组大小不固定随时变化怎么办呢?  动态数组就这样应运而生,龙哥给我们讲的是自己用代码写动态数组,并非用的ArrayList 看看字符

数组还是好说,学过一两门编程语言的就知道,需要注意的是数组声明时需要把大小给它定下来,比如声明一个字符串类型的数组:String str[]=new String[10];  
  但是问题就来了,每次都是大小确定的数组,我需要数组大小不固定随时变化怎么办呢?
  动态数组就这样应运而生,龙哥给我们讲的是自己用代码写动态数组,并非用的ArrayList
 
看看字符串动态数组的写法:

package 数组与动态数组;
/**
 * 动态数组:存放字符串的
 * 
 * @author kowloon
 * 
 */
public class DynamicArray {
// 定义一个原始数组
String[] src = new String[0];
/**
 * 将指定元素放入数组
 
 * @param s
 *            要放入的元素内容
 */
public void add(String s) {
//三个新概念
//容量、增长比率、可变数组长度(元素个数)
 
 
// 定义一个新数组,长度是原始数组长度+1
String[] dest = new String[src.length + 1];
 
// 将新元素放入新数组的最后一个下标位置
dest[dest.length - 1] = s;
 
// 将原始数组中的数据考入新数组
for (int i = 0; i < src.length; i++) {
dest[i] = src[i];
}
// 将src指向新数组
src = dest;
}
/**
 * 根据下标取出元素
 
 * @param index
 *            要取出的元素的下标
 * @return 返回取得的元素
 */
public String get(int index) {
String s = src[index];
return s;
}
/**
 * 获得数组中的元素个数
 
 * @return 返回获得的元素个数
 */
public int size() {
return src.length;
}
/**
 * 将指定的元素放入指定的位置
 
 * @param s
 *            要放入的元素
 * @param index
 *            元素所在的位置
 */
public void insert(String s, int index) {
//定义新数组 长度在原来的基础上加一
String[] dest1=new String[src.length + 1];
//从index号元素开始向后挪位置  
for(int i=index;i<src.length;i++)
{
dest1[i+1]=src[i];
}
//把index前面的元素拷贝到新数组
for(int i=0;i<index;i++)
{
dest1[i]=src[i];
}
dest1[index]=s;
src = dest1;
}
/**
 * 修改指定位置的元素
 
 * @param s
 *            修改后的新元素
 * @param index
 *            元素的位置
 */
public void modify(String s, int index) {
src[index]=s;
}
/**
 * 删除指定位置的元素
 
 * @param index
 *            要删除的元素的位置
 * @return 返回被删除的元素
 */
public String delete(int index) {
//新数组长度为原来的减一
String[] dest =new String[src.length-1];
//把被减的元素取出来等会儿返回它
String s=src[index];
//把index号元素之前的都复制给新数组
for(int i=0;i<index;i++)
{
dest[i]=src[i];
}
//把原数组index号元素后的复制到新数组
for(int i=index+1;i<src.length;i++)
{
dest[i-1]=src[i];
}
src=dest;
 
return s;
}
/**
 * 删除指定的元素
 * @param s 要删除的元素
 */
public void delete(String s){
 
}
}

 总结:
总体来说呢,思想就是只要涉及到数组的长度需要增加或者减小的时候就必须用一个新的数组来代替原来的数组啦, delete的时候数组长度不是需要减小吗?所以在delete函数里面需要有一个String[] dest=new String[src.length-1]来代替原来的数组,这个新的数组的长度总是比原来的数组大小小1,所以new String[src,length-1]  (src为原数组) ,删除的时候我们用的是指定的下标(index)来删除元素,怎么来删除这个元素呢?新是数组怎么来构造呢?很简单啦,只要index号元素前面的不变,用一个for循环把它们拷贝过来就行啦,接着再用一个for循环把除开index号元素外的元素按顺序全部拷贝到新数组,这样新数组里面就没有了index号元素了,最后不要忘记把原数组src指向新数组dest (src=dest;),其他的操作函数思想大致是一样的。

 

自己的String动态数组

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
以下内容是转的 ,但是究竟是转自谁的,我也不是很清楚了,但是是在csdn上的,我无意在百度空间看到
java的数组总的来说有两种定义方法一种是型如: int [] array=new int[10]; 的定义 这种定义相当于
来源:http://mcdelfino.blog.51cto.com/2058744/660711 string直接分成char数组, 然后逐个输出来~
在使用数组的过程中,有时候希望数组的长度和元素个数能随程序的运行不断改变,但改变一次就要重新
1、 int **p;表示指向指针的指针。 这个很容易理解,就是两次动态生成一维数组的过程。 int *p=new
1 #include<stdio.h> 2 #include<stdlib.h> 3 4 int main() 5 { 6 int i; 7 int n; //
一、动态数组实现通常有两种方式: 1、用一个单独的堆单元作为连续的缓冲区来保存数组元素,通常针
首先:为什么需要动态定义数组呢? 这是因为,很多情况下,在预编译过程阶段,数组的长度是不能预先
在C语言中,有内置的一维数组,二维数组等多维数组,也可以使用动态分配内存的方式,很容易的得到一
自己动手填充动态纹理 缘起: 本篇在此篇基础上来写的 《精通DirectX 3D》第六章 纹理映射基础 01_T
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号