有没有一种方法可以在不复制的情况下获取ArrayList的内部数组?
我有一个函数,它以普通Java数组作为输入,我想用ArrayList的内容调用它。问题是我会经常调用它,每次都进行复制将导致性能问题。
有没有一种方法可以在不复制的情况下获取ArrayList的内部数组?
我有一个函数,它以普通Java数组作为输入,我想用ArrayList的内容调用它。问题是我会经常调用它,每次都进行复制将导致性能问题。
static Object[] getBackingArray(ArrayList<?> arrayList) {
try {
Field elementData = ArrayList.class.getDeclaredField("elementData");
elementData.setAccessible(true);
return (Object[]) elementData.get(arrayList);
} catch (NoSuchFieldException | IllegalAccessException e) {
throw new RuntimeException(e);
}
}
ArrayList
是完成工作的正确工具。在这种情况下,你应该重构处理代码以使用 Lists
。像 ArrayList
这样的随机访问实现可以提供与数组相同的所有功能,因此我认为原则上没有任何问题。length
字段获取其大小。如果您需要ArrayList
中实际元素的数量,只需调用size()
即可。 - gdejohnObjectArrayList<E>
具有方法E[] elements()
。是的,为了一个单一的类而携带依赖关系可能有点奇怪,但是如果您注意性能,那么您可能会发现集合的基元特殊化很有用。
ArrayList
这个名称暗示了什么意思? - Henry