编写一个方法镜像,通过将原始序列的镜像追加到列表的末尾,使整数列表的大小翻倍。镜像是按相反顺序排列的相同的值序列。例如,如果一个名为list的变量存储了这个值序列:
[1, 3, 2, 7]
,然后我们进行以下调用:list.mirror();
,那么它应该在调用之后存储以下值:[1, 3, 2, 7, 7, 2, 3, 1]
注意到,它的大小已经加倍,它的原始序列在列表末尾以相反的顺序出现。对于列表中有多少元素,您不能做任何假设。由于添加这些元素可能会超出基础数组的容量,因此可能需要调用ensureCapacity来扩大该数组。假设向ArrayIntList类添加了以下字段:公共类ArrayIntList {私有int[] elementData;私有int大小;公共空添加( int值){.}公共空添加(int索引,int值){.}公共空ensureCapacity(int能力){.} //您的代码在这里}
我可以做哪些改进来帮助我未来的编码?有兴趣知道是否有其他方法来解决这个问题,以及我解决问题的方法是否安全?此代码与ArrayIntList.java类进行交互。
public void mirror() {
if (size != 0) {
int limit = size * 2;
this.ensureCapacity(limit);
size = limit;
for (int i = 0; i < size; i++) {
elementData[(limit - 1) - i] = elementData[i];
}
}
}
发布于 2017-11-12 10:45:51
这是很好的代码,因为它能做它在罐头上说的话。我有两点意见:
this.
in this.ensureCapacity(limit)
是不必要的。不管怎么说,有些人发誓要加起来,所以这是风格的问题。
另一个注意事项是,循环使用的元素是所需的两倍,因为在循环之前将size
设置为limit
。你可以推迟到:
public void mirror() {
if (size != 0) {
int limit = size * 2;
this.ensureCapacity(limit);
//size = limit; // [!] moved to below >>>
for (int i = 0; i < size; i++) {
elementData[(limit - 1) - i] = elementData[i];
}
size = limit; // [!] <<< moved from above
}
}
就这样。好密码。
https://codereview.stackexchange.com/questions/180246
复制相似问题