如何自定义一个长度可变数组

摘要:本文主要写了如何自定义一个长度可变数组

数组是在程序设计中,为了处理方便,把具有相同类型的若干元素按无序的形式组织起来的一种形式

在定义之初,数组的长度就被定义

新建数组有很多方式 下面两个都可以 但一般书写习惯会选择第一种

1 String[] array = new String[5]; //新建一个长度为5的字符串数组
1 String array[] = new String[5];  // 新建一个长度为5的字符串数组

由于数组的长度一旦初始化就无法改变,所以我们需要另辟思路

假如我有一个只能装5个鸡蛋的篮子

现在我想多放入一个鸡蛋 但篮子放不下 怎么办!!

用传说中的四步法就可以解决这个问题啦

1.找一个能放下6个鸡蛋的容器!

2.将五个鸡蛋放入后来的容器!

3.将拿来的第六个鸡蛋也放入容器!

4.将之前的“篮子”标签撕下,贴在新容器上!

此时,我就有了一个能装6只鸡蛋的篮子!是不是很简单呢

数组也是这样的

将篮子看做为一个长度为5的数组 其元素有 1 ,2 ,3 ,4 ,5

此时有一个元素 6 需要加入

则先新建一个长度为6的数组

然后将原来数组中的元素依次放入新建的数组

然后将元素 6 也放入其中

然后将原来的篮子标签撕下 给新的数组

将原数组的地址指向新数组

想必看到这里 ,思路应该没有问题了

代码实现如下:

 1 public class MyArray {
 2     //定义一个初始长度为0的数组,用来缓存数据
 3     private String[] src = new String[0];
 4     /**
 5      * 保存数据的方法
 6      * @param s 要保存的元素
 7      */
 8     public void add(String s) {
 9         //定义一个新数组,长度是原数组的长度+1
10         String[] dest = new String[src.length+1];
11         //将新元素放入最后一位
12         dest[src.length]=s;
13         //将原先的数据对应下标放入新数组
14             for(int i = 0 ;i<src.length;i++) {
15                 dest[i]=src[i];
16
17             }
18             //将原数组指向新数组
19             src=dest;
20     }
21     /**
22      * 根据下标提取元素的方法
23      * @param Index    要提取元素的下标
24      * @return    返回所提取的元素
25      */
26     public String get(int index) {
27         //返回对应下标的元素
28         return src[index];
29     }
30
31     /**
32      * 获得元素可变数组中元素的个数[长度]
33      * @return    返回元素的个数
34      */
35     public int size() {
36         //返回数组的长度
37         return src.length;
38     }
39     /**
40      * 将新元素插入到指定位置
41      * @param s    要插入的新元素
42      * @param index    要插入的位置
43      */
44     public void insert(String s,int index) {
45         //创建一个新的数组,其长度为原数组长度加1
46         String[] dest = new String[src.length+1];
47         //将指定的元素放入指定的位置
48         dest[index]=s;
49         //在指定下标之前的元素对应下标放入新数组
50         for(int i=0;i<index;i++) {
51             dest[i]=src[i];
52         }
53         //在指定下标之后的元素对应其下标加1放入新数组
54         for(int i=index+1;i<src.length+1;i++) {
55             dest[i]=src[i-1];
56         }
57         src=dest;
58     }
59     /**
60      * 删除指定未知的元素
61      * @param index 要删除的元素的下标
62      */
63
64     public void delete(int index) {
65         //创建一个新的数组,其长度为原数组长度减1
66         String[] dest = new String[src.length-1];
67         //指定下标之前的原数组元素对应其下标位置放入新数组
68         for(int i=0;i<index;i++) {
69             dest[i]=src[i];
70         }
71         //指定下标之后的原数组元素对应其下标位置-1放入新数组
72         for(int i=index+1;i<src.length;i++) {
73             dest[i-1]=src[i];
74         }
75         src=dest;
76     }
77
78     /**
79      *  将指定位置的元素与指定元素替换
80      * @param index 指定位置的下标
81      * @param s    要替换的元素
82      * @return    返回替换后的
83      */
84
85     public String replace (int index,String s) {
86         return src[index]=s;
87     }
88 }

感谢阅读

原文地址:https://www.cnblogs.com/hy610581/p/9053778.html

时间: 2024-10-16 06:54:49

如何自定义一个长度可变数组的相关文章

C语言struct中的长度可变数组(Flexible array member)

C_struct中的长度可变数组(Flexible array member) Flexible array member is a feature introduced in the C99 standard of the C programming language (in particular, in section §6.7.2.1, item 16, page 103). It is a member of a struct, which is an array without a g

Java实现长度可变数组

1.数组:数组是一种数据结构,用来储存同一种类型值得集合,数组一旦被创建就不能改变它的大小. 2.既然数组的长度是不可改变的,那么怎么实现长度可变呢? 思路:既然数组长度不可变,那么我们可以创建一个长度与原数组不同的新数组,让原数组变量指向新数组,从而实现长度可变(新数组如果没有使用,那么就会被java垃圾回收机制回收销毁,从而不浪费内存空间.) a)直接创建新数组,让原数组变量指向新数组. import java.util.Arrays; /** * 这是我们用来测试的类 * * @autho

Objective - C NSArray不可变数组和NSMutableArray可变数组

OC中存储数据最常用 的两个容器就是数组和字典,而作为最常用的,应该了解这所有的特点,及用法. OC中的数组是一个容量,有序的管理了一系列元素,并且存放在数组里的元素,必须是对象类型. 不可变数组,见名知意,不可改变的,只要创建成功之后都不能改变数组容量,元素. 创建一个不可变数组对象 //1.初始化方法(多个对象用逗号隔开,并且最后一个对象与nil之间也要有逗号) NSArray *array1 = [[NSArray alloc] initWithObjects:@"zhonger"

面试题 一个长度为100的数组,随机插入1-100,不重复,写出大致思路即可;

之前回答的是: 定义一个长度为100的a数组,存1-100,每次从数组里随机的位置取一个元素,放入b数组,并且从a数组移除: 后来百度了一下,说是数组重新排列不够好,更好的做法是 每次将随机取到的数与数组 "最后一位" 交换: 想想还是有点道理,不用重新排列,而且不需要两个数组 <script> function fn(n) { var arr = []; for (var i = 0; i < n + 1; i++) { arr[i] = i + 1; } for

不使用循环,如何创建一个长度为100的数组

前言: 问题描述:在不使用循环的条件下,如何创建一个长度为100的数组,并且数组的每一个元素是该元素的下标? 这是一个比较经典的前端面试题,也可以当笔试题,咋一看,好像难度不大,实际上考察的知识点还不少,值得写篇文章来备忘!废话不多说,直接进入正文! 正文: 为了理解这道题的意思,我们先用传统的方法来实现一下: 使用for方法: var arr = new Array(100); for(var i=0;i<arr.length;i++){ arr[i] = i; } console.log(a

OC中动态创建可变数组的问题.有一个数组,数组中有13个元素,先将该数组进行分组,每3个元素为一组,分为若干组,最后用一个数组统一管理这些分组.(要动态创建数组).两种方法

<span style="font-size:24px;">//////第一种方法 // NSMutableArray *arr = [NSMutableArray array]; // for (int i = 0; i < 13; i ++) { // [arr addObject:[NSString stringWithFormat:@"lanou%d",i + 1]]; // } // NSLog(@"%@",arr);

黑马程序员——java——自定义一个比较器,按照字符串的长度升序的方法来比较字符串进行储存

自定义一个比较器,按照字符串的长度升序的方法来比较字符串进行储存 import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; class Mycompara implements Comparator { //自定义一个比较器,按照字符串的长度来比较字符串,然后对其进行储存 //如果字符串的长度一样长了后,再依据字符内容进行排序 public int compare(Object o1, Ob

一个简单的算法,定义一个长度为n的数组,随机顺序存储1至n的的全部正整数,不重复。

前些天看到.net笔试习题集上的一道小题,要求将1至100内的正整数随机填充到一个长度为100的数组,求一个简单的算法. 今天有空写了一下.代码如下,注释比较详细: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Text.RegularExpressions; 6 7 namespace TestNumber 8 { 9 cl

奇妙JS代码系列(三)一道有趣的题(创建一个长度为x数组)

原题描述: 不使用loop循环,创建一个长度为100的数组,并且每个元素的值等于它的下标 这个问题的一些变种例如给一个长度length和value,返回长度为length值全为value的数组等. 误区 最容易掉入陷阱的: var arr = new Array(100); arr = arr.map(function(item, index) { return index; }); 如果你的答案是这个,恭喜你成功掉入出题人的坑了. 解释 坑在Array(100),可以看看MDN的规范, new