如何收缩数组并从另一个数组重定位数据?

时间:2014-09-13 07:28:05

标签: java

假设如果此列表的大小小于1且最后一个元素为null,我的方法将失败?

我想使用以下类型的方法。

private boolean decreaseArray() {
    return false;
}

2 个答案:

答案 0 :(得分:0)

由于这听起来像是家庭作业,我只是根据我对你问题的解释给你一些指导方针。

如果你有一个长度为n且大小为m(m

但是,首选使用List接口,如果需要阵列支持的实现,则为ArrayList。

请注意,ArrayList确实可以保留比它包含的exaxt数量更多的内存,但是如果您愿意,可以继承List接口并提供您自己的ArrayList实现,当插入发生时,它会增加1,或者在移除时缩小一个。但是,这种实现方式非常糟糕,因为您必须在任何编辑操作之前和之后复制整个列表,这会在O(n)时间复杂度下放置一个简单的添加和删除方法,这很糟糕。

另一个替代方案是使用linkef列表,因为使用包含实际元素的非原始结构以及对相邻节点的引用,它们本身会带来额外的空间开销。

答案 1 :(得分:0)

我不确定你在问什么,但听起来有点像你在描述Arrays.copyOfArrays.copyOfRange

import java.util.Arrays;

public class Foo {

    static <A> A[] decreaseArray(A[] as) {
        return Arrays.copyOf(as, as.length - 1);
    }

    public static void main(String[] args) {

        System.out.println(Arrays.asList(
            decreaseArray(new String[] {"a", "b", "c"})));
        // [a, b]

        System.out.println(Arrays.asList(
            decreaseArray(new String[] {})));
        // java.lang.NegativeArraySizeException
    }
}