gpt4 book ai didi

java - 集合接口(interface)与数组

转载 作者:IT老高 更新时间:2023-10-28 20:41:19 24 4
gpt4 key购买 nike

我们正在学习收集接口(interface),我想知道你们是否对它的一般用途有什么好的建议?你可以用一个集合来做什么,而你不能用一个数组来做?数组可以做什么,而 Collection 不能做什么(除了允许重复)?

最佳答案

想到它的简单方法是:集合以各种方式击败对象数组。考虑:

  • 集合可以是可变的或不可变的。非空数组必须始终是可变的。
  • 集合可以是线程安全的;甚至并发。将数组发布到多个线程永远不会安全。
  • 集合可以允许或禁止空元素。数组必须始终允许 null 元素。
  • 集合是类型安全的;数组不是。因为数组“假”协方差,ArrayStoreException可以在运行时产生。
  • 集合可以包含不可具体化的类型(例如 List<Class<? extends E>>List<Optional<T>> )。数组会为此生成警告。
  • 集合具有成熟的 API;数组只有 set-at-index、get-at-index、length 和 clone。
  • 集合可以有 View (不可修改、子列表...)。数组没有这样的运气。
  • 列表或集合的equals , hashCodetoString方法做用户期望的事情;在数组中,它们是常见的错误来源。
  • 类型使用注释,如 @Nullable对数组非常困惑——快,String @Nullable [] 是什么意思?意思是? (你确定吗?)
  • 由于上述所有原因,第三方实用程序库不应费心为数组添加太多额外支持,只关注集合,因此您也有网络效应。对象数组永远不会成为 Java API 中的一等公民。

上述原因中的一个Effective Java,第三版,第126页的第28条中涵盖了 - 但更详细。 p>

那么,你为什么要使用对象数组呢?

  • 您正在非常严格地优化某些内容
  • 您必须与使用它们的 API 进行交互,并且无法修复它
    • 所以转换为/从 List尽可能接近该 API
  • 因为可变参数(但可变参数被过度使用)
    • 所以...和之前的一样
  • 我想不出任何其他原因,它们太糟糕了

关于java - 集合接口(interface)与数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6100148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com