尺寸和长度方法之间的区别?
Posted
技术标签:
【中文标题】尺寸和长度方法之间的区别?【英文标题】:Difference between size and length methods? 【发布时间】:2013-12-10 03:58:27 【问题描述】:.size()
和 .length
有什么区别? .size()
仅适用于数组列表,.length
仅适用于数组吗?
【问题讨论】:
这似乎是特定于编程语言的,并且没有标签。 规范答案:***.com/questions/300522/…这个也不错:***.com/questions/1965500/length-and-length-in-java 【参考方案1】:size()
是java.util.Collection
中指定的方法,然后被标准库中的每个数据结构继承。 length
是任何数组上的一个字段(数组是对象,你只是看不到这个类),而length()
是java.lang.String
上的一个方法,无论如何它只是char[]
上的一个薄包装器。
也许在设计上,字符串是不可变的,并且所有*** Collection 子类都是可变的。因此,在您看到“长度”的地方,您知道这是恒定的,而在您看到“大小”的地方,则不是。
【讨论】:
“这只是 String[] 上的一个薄包装器”。你的意思是char[]
?
我知道这个线程已经过时了,但我认为 Matt 是对的,不同之处在于它们在内存中的存储方式。数组元素是按顺序存储的,访问它们的方式是base + offset
,其中base
是开始(索引0);相对而言,这也使数组更快。 ArrayList 属于链表家族,不是按顺序存储的,这就是它们“可调整大小”的原因。因此,尽管从概念上讲,链表具有“长度”,但它们并不作为“列表”存储在内存中,因此它们使用更通用的“大小”。
string[]
应该是char[]
@MattPuntam:正如你所说,Java 也是; size() 是 java.util.Collection 中指定的方法, 但我没有得到定义长度的位置。在数组中。这是我的面试问题。你能证明它来澄清我的问题吗?【参考方案2】:
length 是常数,用于找出数组的存储容量,而不是数组中的元素个数
例子:
int[] a = new int[5]
a.length
总是返回 5,称为数组的容量。但是
数组中元素的个数称为大小
例子:
int[] a = new int[5]
a[0] = 10
这里的大小是 1,但 a.length
仍然是 5。请注意,数组上没有实际的属性或方法称为 size
,因此您不能只调用 a.size
或 a.size()
来获取值 1。
size()
方法可用于集合,length
适用于 Java 中的数组。
【讨论】:
您不能为int[]
等原始数组调用 size()
。因此a.size=1
没有意义。
请参阅***.com/questions/46073467/java-array-attribute-size 了解有关此答案的讨论。
@Chinmayjain:那不是任务;那只是说结果会是什么。
@JESii 即使不是赋值,也仍然错。根本没有a.size
这样的东西。它只是不存在,因此声称它“将是” 1 是没有意义的。【参考方案3】:
.length
是一个字段,包含容量(不是当前数组包含的元素数)数组强>.
length()
是 Strings(以及其他)使用的 方法,它返回 String 中的字符数 ;对于字符串,容量和包含元素(字符)的数量具有相同的值。
size()
是由Collection 的所有成员(列表、集合、堆栈...)实现的方法。它返回集合包含的元素数量(不是容量;有些集合甚至没有定义的容量)。
【讨论】:
【参考方案4】:length variable:
在 Java 中,数组(不是 java.util.Array)是语言本身的预定义类。为了找到数组的元素,设计者使用了长度变量(长度是预定义类中的字段成员)。他们必须给定 length() 本身才能在 Java 中保持一致;但没有。原因在于性能,执行长度变量比调用方法 length() 更快。这就像用 == 和 equals() 比较两个字符串。 equals() 是一个方法调用,它比执行 == 运算符花费更多时间。
size() method:
它用于查找集合类中存在的元素数量。它在 java.util.Collection 接口中定义。
【讨论】:
【参考方案5】:根据语法,我假设它是某种 C 的后代语言。根据我所见,length
用于简单的集合项,如数组,在大多数情况下它是一个属性。
size()
是一个函数,用于动态集合对象。但是,出于所有使用目的,您不会发现使用其中任何一个的结果有任何差异。在大多数实现中,size 只返回长度属性。
【讨论】:
语言是Java ...您的答案不适用于那个。 那个标签是在我回答之后添加的,所以我不知道。针对java的所有其他答案都是在问题一年后给出的。 问题中的源代码一直是Java ......即使你不认识它也是如此。所以你的答案一直不适用。无论哪种方式,它现在都没有用,应该被删除。 您也对标记不正确。根据编辑历史,它是在“2015 年 2 月 14 日 3:00”添加的。除了您的答案(包括一个已删除的答案)之外,有两个(可能是三个)答案早于java
标记已正确地将其识别为Java。
@StephenC 这越来越荒谬了。你能看到我在 2013 11 月 25 日回答了这个问题,在添加问题 4 分钟后,当没有这样的标签信息可用时?你自己告诉过这个标签是在 2015 年添加的。一些用户确实假设编程语言并给出答案。我只是给出了我认为足够通用的解释,以便尽我所能帮助候选人。我看到你为社区提供了很多帮助。所以,我尊重你。但我宁愿通过回答来帮助其他人,也不愿与你争论以提升我对非问题的自我意识。【参考方案6】:
我打赌(未指定语言)size()
方法返回 length
属性。
但有效的for
循环应该如下所示:
for (int i = 0; i < values.length; i++)
【讨论】:
以上是关于尺寸和长度方法之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章