创建一个长度可变的数组

我们知道,数组的内存要求是连续的。这就导致一个数组定义好之后之后就不能再修改长度。我们希望定义一个新的类,通过这个类实现数组使用意义上的长度改变。

我们的目标是创建一个新的类,可以通过这个类来定义数组,并且实现数组的add,get,remove,set方法。

这里出现的类只考虑了实现,并没有考虑实现的时间复杂度等问题。

名词解释

add:在数组的后面增加新的元素或数组数组

get:查找元素出现的位置(第一次出现的、最后一次出现的、所有下标)或是查找下标对应的元素

remove:删去某一个位置的元素并将后面的元素前移(不留空位)

set:实现元素替换:根据下标替换或根据元素替换(根据元素替换可能需要替换多个)

需要提前定义好的变量

数组允许的最大长度 maxlength 

数组允许的最小长度 minlength

数组已经存的元素个数 size(注意这个变量的大小当然不等于length)

提前定义一个空数组 emptyArray

我们自己的数组 elementArray

建议提前写好以减少重复代码的方法

check方法:输入变量为一个整数i,若i大于等于0且i小于size,则结束,否则报错

报错语句为 throw new Illegal~~~~

copy方法:输入变量为一个老数组,一个新数组。check一下老数组的长度是否小于等于新数组。用for循环讲老数组的元素依次放到新数组里

数组定义

数组定义有三个初始化方法

1没有输入参数,这时候我们自己定义数组及其长度,建议定义为一个空数组。

2输入参数为数组长度,这时候我们根据输入长度来定义数组

3输入参数为数组,这时候将输入数组的内容传给我们自己的数组

add方法:

add方法分为两种,一种为只加入一个元素,一种为加入一个数组(都是在数组地末尾)

对于只加入一个元素的情况:

首先判断数组长度在add之后是否会超出已定义数组的长度,即size是否小于length。没超过的话直接令Strings[size]=对应的元素。

超过的话:定义一个新的长度更长的空数组(length+length>>1)(记为newArray)

调用copy方法,elementArray为老数组,newArray为新数组。然后将需要加的元素加到数组最后。

elementArray = newArray;这一步的作用是把新数组的地址传为elementArray变量。

对于加入数组的情况:

重复调用只加入一个元素的方法

get方法:

如果要根据下标查找,输入下标位置,输出相应的元素。记得check下标是否合法。

如果要查找元素出现的所有位置:定义一个新数组ints[],其中元素全为整数,其长度与elementArray相等,用于记录出现元素的下标。定义一个常数count,用于记录被查找元素出现了几次,初值为0。

对elementArray进行遍历,每出现一个要查找的元素,把他的下标传给ints[count]。

遍历完成之后定义一个新的数组newints[],长度为count。调用copy方法把ints复制给newints,这一步的目的是对ints[]进行截尾(去掉后面的null)

输入newints

如果要查找出现的第一个位置:定义一个变量用于记录这个位置,初值为-1。对elementArray进行遍历,出现被查找的元素就把这个元素的下标赋值给定义的变量,并break循环

如果要查找出现的最后一个位置:思路与查找第一个相同,只是循环由从0开始每次加一变成从size-1开始每次减一。

remove方法:

根据元素删除:对数组进行遍历,如果出现对应的元素,就令后续的元素迁移k个位置,k为已经删除元素的数量

根据下标删除。判断输入下标是否合法。删除元素前的部分迁移,后的部分作为i+1输入到新数组里

set方法:

和get的思路一样,查询完成之后替换一下就行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值