当前位置: 首页 > 面试题库 >

扩展数组?

佟阳焱
2023-03-14
问题内容

我知道您不能动态扩展普通数组,但这是一种有效的方法吗?

public int size = 0;    
public String[] OrigArray = new String[size+1];

public void expand(){


            String[] tempArray = new String[size+1];

            tempArray = (String[])OrigArray.clone();

            OrigArray = new String[size+1];

            OrigArray = (String[])tempArray.clone();

            size++;

    }

我知道比尝试使用普通数组更好的方法,但是我想首先使用普通数组来解决这个问题。

我的愿望是,它从OrigArray0 + 1(so
1)开始,在expand()被称为new时tempArray,它的大小与相同OrigArray,然后保持不变,OrigArray同时OrigArray再次声明,size+1然后将tempArray其复制回新的大小OrigArray。这对我来说很有意义,但我总是会遇到异常情况?


问题答案:

该方法不会更改OrigArray的值;它所做的只是在其中存储一个克隆的克隆,因此实际上该值不会更改。

我认为您想要的是:

public void expand() {
    String[] newArray = new String[OrigArray.length + 1];
    System.arraycopy(OrigArray, 0, newArray, 0, OrigArray.length);

    //an alternative to using System.arraycopy would be a for-loop:
    // for(int i = 0; i < OrigArray.length; i++)
    //     newArray[i] = OrigArray[i];
    OrigArray = newArray;
}

这将创建一个大小大于OrigArray的数组,将OrigArray的内容复制到其中,并将该数组分配给OrigArray。除非您想记住expand()已调用了多少次,否则应该没有理由要使用变量size

编辑:如果您真正想要的是知道一种明智地实现所需功能的方法,则可以使用@ÓscarLópez所说的并使用ArrayList。



 类似资料:
  • Array.from() Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括ES6新增的数据结构Set和Map)。 下面是一个类似数组的对象,Array.from将它转为真正的数组。 let arrayLike = { '0': 'a', '1': 'b', '2': 'c',

  • 在针对PHPCMS V9做二次开发的时候,您可以自定义一些全局函数且不影响以后官方升级 您自定义的文件请放置于该文件中 phpcms\libs\functions\extention.func.php或者以.func.php格式命名,放置于如下目录中 phpcms\libs\functions\autoload

  • 函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法。 function log(x, y) { y = y || 'World'; console.log(x, y); } log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', '') // He

  • 二进制和八进制表示法 ES6提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示。 0b111110111 === 503 // true 0o767 === 503 // true 从ES5开始,在严格模式之中,八进制就不再允许使用前缀0表示,ES6进一步明确,要使用前缀0o表示。 // 非严格模式 (function(){ console.log(0o11 =

  • 作者:陈希章 发表于 2018年4月7日 前言 此前我有一篇 文章 讲解了Microsoft Graph的一种数据扩展技术—— 开发扩展(Open Extensions),它可以实现在支持的对象(例如用户,组等)上面附加任意的数据。但开放扩展的问题在于,它是基于某个具体对象的,你无法确定两个对象是否具有同样的扩展(即便属性名一样,但也可能其包含的数据完全不同)。如果我们需要对一类对象进行统一的扩展

  • 作者:陈希章 发表于 2018年1月2日 前言 Microsoft Graph是一张拥有巨大价值的网络,它定义了包括Office 365在内的资源的实体及其关系,它的价值体现在,随着用户积累的数据越来越多,经过授权的应用程序可以在这些数据的基础上得到很多有价值的信息,并且帮助用户更好地完成工作。 Microsoft Graph也是Office 365从单纯的SaaS平台向PaaS平台(Office