【问题标题】:How does `Java` `List` method `size` work?`Java` `List` 方法 `size` 是如何工作的?
【发布时间】:2011-01-13 09:54:08
【问题描述】:

在Java中,有一个List接口和size()方法来计算List的大小。

  • 当我拨打List.size()时,它是如何计算的?
  • 是线性计数,还是计数确定后size()时只返回值?

【问题讨论】:

标签: java list


【解决方案1】:

大小定义为列表中元素的数量。实现没有指定 size() 成员函数如何操作(迭代成员、返回存储的计数等),因为 List 是一个接口而不是实现。

一般来说,大多数具体的 List 实现都会在本地存储它们的当前计数,大小为 O(1) 而不是 O(n)

【讨论】:

  • +1 - 最后一句话对于三个通用列表类 ArrayList、CopyOnWriteArrayList 和 LinkedList 绝对正确。
【解决方案2】:

java.util.List 是一个接口,而不是一个类。对于不同的具体实现,size()方法的实现可能会有所不同。在java.util.List 实现上的size() 方法的合理实现是将int 类型的实例成员初始化为零,并在向List 添加/删除项目时适当地递增/递减它。 size() 方法可以简单地返回上述实例成员。当然,这只是一个例子。有关完整的详细信息,您始终可以查看内置 List 实现的源代码。所有源代码都已提供多年。

【讨论】:

  • 在这种情况下,我非常喜欢 .NET 命名约定,在接口中使用前缀“I”。
  • @dalle:我发现I 前缀是匈牙利噪音。 java程序员一般都知道List(还有MapSetCollection等)是接口。另一方面,java 中的许多接口使用able 后缀。例如。 SerializableCloneableIterable 等。所以我猜 java 内部也不是一致的......
  • "有关完整的详细信息,您可以随时查看内置 List 实现的源代码。"这是一个很好的建议,将在你的职业生涯中为你服务。有时如果源代码不可用,我什至会反编译以获得答案。
猜你喜欢
  • 2013-03-08
  • 2015-07-02
  • 1970-01-01
  • 1970-01-01
  • 2015-08-15
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多