加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-14 16:20:53 所属栏目:Java 来源:网络整理
导读:在 java.util. Arrays中有一个名为“ArrayList”的私有静态类. 它只是从Arrays.asList方法引用. 这样做的好处是什么? 为什么不引用java.util.ArrayList? 代码如下: /** * @serial include */ private static class ArrayListE extends AbstractListEimple
在 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.这个“奇怪”行为规范的全部要点是避免复制.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读