截断数组而不复制它?

Rob*_*Rob 24 java

在Java中,有没有办法截断数组而不必复制它?常见的习语是Arrays.copyOf(foo, n)(新数组长n个元素).我不认为有另一种选择,但我很好奇是否有更好的方法.

Alb*_*oPL 20

初始化后,Java中的数组长度无法更改,因此您不得不使用新大小进行复制.实际上,Java数组的length参数被声明为final,因此一旦设置它就不能更改.

如果你需要更改数组的大小,我会使用ArrayList.

  • +1,如果您想有效地操纵事物的大小或删除元素,则数组列表非常好。 (2认同)

Rob*_*Rob 5

我正在考虑更多......而且只是为了踢,如下所示.

注意:这只是"可以做到吗?" Java黑客攻击中的智力锻炼.任何试图在生产代码中实际使用这个想法的人都应该得到毫无疑问会产生的所有痛苦.

public class Foo
{
    private static byte[] array = new byte[10];

    public static void main(String[] arg) throws Exception
    {
        Field field = Unsafe.class.getDeclaredField("theUnsafe");
        field.setAccessible(true);
        Unsafe unsafe = (Unsafe) field.get(null);
        Field arrayField = Foo.class.getDeclaredField("array");
        long ptr = unsafe.staticFieldOffset(arrayField);
        // doesn't work... there's gotta be a way though!
        unsafe.reallocateMemory(ptr, 5);
        System.out.println("New array size is: " + array.length);
    }
}
Run Code Online (Sandbox Code Playgroud)