java.util.Arrays中的私有静态类ArrayList – 为什么?

前端之家收集整理的这篇文章主要介绍了java.util.Arrays中的私有静态类ArrayList – 为什么?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
java.util. Arrays中有一个名为“ArrayList”的私有静态类.
它只是从Arrays.asList方法引用.

这样做的好处是什么?
为什么不引用java.util.ArrayList?

代码如下:

/**
    * @serial include
    */
      private static class ArrayList<E> extends AbstractList<E>
implements RandomAccess,java.io.Serializable

解决方法

What is the benefit of doing this? Why is java.util.ArrayList not referred instead?

一个原因是实际实现类不是公共API细节.这样做意味着他们可以在将来更改实施类,而不会有破坏客户代码的风险.

这样做的另一个原因是这个私有类对ArrayList实现了一些不同的操作.特别是涉及更改列表大小的操作需要实现以引发异常,以便符合Arrays.asList(…)方法的javadocs中指定的行为.

实际上,Arrays.asList(…)返回的列表是原始数组的包装器,而不是一个完整的功能列表.这有优点和缺点:

>在下行方面,某些操作不起作用.
>最重要的是,创建包装器比从数组中创建一级列表便宜得多. (后者需要将数组内容复制到列表中),而对于大型数组来说这将是昂贵的.)

另外,存在通过包装器(或反之亦然)可以看到原始数组的更改的问题,如果这是您所需要的,则可能会很有用.

你在这个评论中问过:

a) Why return non resizable list?

因为返回常规可调整列表需要在某个时候复制数组内容…这是昂贵的. (如果执行延迟复制,直到执行大小更改操作,原始数组和列表之间的关系将很难理解,请考虑…)

b) Why not use Collections.unmodifiableList and pass the java.util.ArrayList object?

那没有任何事情.您仍然必须将数组内容复制到ArrayList.这个“奇怪”行为规范的全部要点是避免复制.

原文链接:https://www.f2er.com/java/125752.html

猜你在找的Java相关文章