前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Arrays.asList() vs Collections.singletonList()

Arrays.asList() vs Collections.singletonList()

作者头像
JavaEdge
发布2022-04-11 17:32:45
4470
发布2022-04-11 17:32:45
举报
文章被收录于专栏:JavaEdge

与 Collections.singletonList(something) 相比,使用 Arrays.asList(something) 来制作一个列表是否有优势(或有很大的不同)?后者也使返回的列表不可变。

  • Collections.singletonList(sth) 不可变
  • Arrays.asList(sth)是 Array 的固定大小的 List 表示,其中 List 和 Array 在堆中连接
  • Arrays.asList(something) 允许对其进行非结构性更改,这会反映到 List 和联合数组。尽管您可以为特定索引设置元素,但它会抛UnsupportedOperationException 来添加、删除元素
  • 对 Collections.singletonList(something) 返回的列表所做的任何更改都将导致 UnsupportedOperationException。
  • Collections.singletonList(something) 返回的 List 的容量将始终为 1
  • Arrays.asList(something) 的容量将是支持数组的大小

singletonList不受数组的支持,而只是对该项目的引用。据推测,它会占用更少的内存,并且可能很重要,具体取决于您要创建的列表数量。

Arrays.asList 方法返回由指定数组支持的固定大小的列表。该方法返回 ArrayList 的实例,它是扩展 AbstractList 而不是 java.util.ArrayList 的私有嵌套静态类。这个静态类提供了一些方法的实现,例如set、indexOf、forEach、replaceAll 等,但是当我们调用 add 时,它没有自己的实现,而是调用了来自 AbstractList 的方法,它抛出了 java.lang.UnsupportedOperationException。

Collections.singletonList 返回一个仅包含指定对象的不可变列表,并且它也是可序列化的。

对于不可变列表,通常使用 Collections.unmodifiableList ,它返回指定列表的不可修改视图。

不可修改的视图集合是不可修改的集合,也是支持集合的视图。请注意,对支持集合的更改可能仍然是可能的,并且如果发生更改,它们将通过不可修改的视图可见。我们可以在 Java 10 及更高版本中拥有一个真正的不可变列表。

参考

  • https://stackoverflow.com/questions/26027396/arrays-aslist-vs-collections-singletonlist
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022/04/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档