【问题标题】:Is there a difference between CPU and Memory Usage of Collections versus ArrayList?集合与 ArrayList 的 CPU 和内存使用情况有区别吗?
【发布时间】:2017-11-06 09:48:01
【问题描述】:

最近我一直在 Eclipse 中为一个项目制作 Bukkit Minecraft 插件,并且我一直在使用数组列表来存储玩家对象。在尝试优化我的代码后,我意识到还有另一种方法可以使用 java Collection 定义所述对象列表。现在我有了基础知识,即集合与数组列表不同,它不允许您根据索引引用变量,但我没有在我的代码中使用它,所以我想知道关于 CPU 是否还有其他优势还是内存使用? 注意*我确实知道通过将变量作为 Collection 传递,可以更容易地将其转换为其他形式的列表,但我相信我不会在我的代码中这样做,所以我不会认为这是一个优势.

【问题讨论】:

  • ArrayList 在内存使用方面是最有效的集合之一(它本质上是一个引用数组) - 我不确定在切换到其他东西时你期望在这方面获得什么.
  • 这整个问题是基于一个基本的误解。 Collection 是一个接口而不是一个类,这使得关于Collection 的 CPU 和内存性能的问题毫无意义。我建议您花时间阅读 Java 教程或 Java 教科书。从长远来看,它将为您节省时间。

标签: java arraylist collections


【解决方案1】:

Collection 不是一个类,它是一个接口。也就是说,它实际上并没有做任何事情。它只是定义了哪些方法可用。其实ArrayList支持Collection接口。所以,你可以这样做:

ArrayList<Integer> list = new ArrayList<>();

但是您可以执行以下操作,并且它们功能相同:

Collection<Integer> list = new ArrayList<>();

但是,在后一个示例中,由于您现在将 ArrayList 引用为 Collection,因此您只能访问 Collection 上的方法,正如您所发现的那样,这些方法受到更多限制比ArrayList.

ArrayList 还支持List 接口,它本身扩展了Collection,并提供了额外的列表方法,所以你可以这样做(一般建议这样做):

List<Integer> list = new ArrayList<>();

所以Collection 与ArrayList 的性能并不是一个真正有效的问题。我认为您想知道的是不同List 实现的比较性能。 Java 中主要的单线程实现是ArrayList 和LinkedList。这些是这样创建的:

List<Integer> arrayList = new ArrayList<>();
List<Integer> linkedList = new LinkedList<>();

您会在那里找到大量材料,每种材料都各有利弊。例如:When to use LinkedList over ArrayList?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多