追根溯源---length、length()和size()

本文详细解析了Java中length属性、length()方法及size()方法的使用场景及其背后的原理。阐述了数组、String和集合在获取长度时的不同实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在写代码的时候,如果没有IDE代码自动补全的功能,很容易搞不清楚 length属性、length()方法和 size()方法 在什么情况下使用,今天就从他们出现的原因上搞清楚。
首先说明一下什么时候使用:
1. java中获取数组长度的时候使用 length 属性;
2. java中获取String的长度的时候使用 length()方法;
3. java中获取针对泛型集合的长度的时候使用size()方法。
下面讲一下原因:
1、为什么数组有length 属性?
首先,数组是一个容器对象(参考文章:Java中数组的特性),其中包含固定数量的同一类型的值。一旦数组被创建,它的长度就是固定的。数组的长度可以作为final实例变量的长度。因此,长度可以被视为一个数组的属性。
2、为什么 String有 length() 方法?
String背后的数据结构是一个char数组,所以没有必要来定义一个不必要的属性(因为该属性在char数值中已经提供了)。和C不同的是,Java中char的数组并不等于字符串,虽然String的内部机制是char数组实现的。(注:C语言中,并没有String类,定义字符串通常使用char string[6] = “hollis”;的形式)

 /** The value is used for character storage. */
  private final char value[];
  .....
   /**
     * Returns the length of this string.
     * The length is equal to the number of <a href="Character.html#unicode">Unicode
     * code units</a> in the string.
     *
     * @return  the length of the sequence of characters represented by this
     *          object.
     */
  public int length() {
      return value.length;
  }

3、为什么集合中有 size()方法?
Collection接口是数据集合的接口,位于数据接口API的最上层,构成Collection的单位被称为元素。接口提供了添加、删除、查看、修改等数据管理功能。Collection接口可以分为三类,分别是map接口、set接口、list接口。
ArrayList:用数组的形式存放数据;
Vector:用数组的形式存放数据;
LinkedList:用双向链表的形式存放;
HashSet:
HashMap:用散列(数组+单向链表)的形式存放;
HashSet:用散列的形式存放;
LinkedHashMap:用散列,双向列表的方式存储;
集合有很多的存储形式,参考文章:Java集合的数据结构,所以都实现了一个统一的方法 size() 方法,但是实现上大不相同。

参考文章:
java 集合的数据结构:http://www.tuicool.com/articles/Uvem2y
Java中数组的特性:http://blog.youkuaiyun.com/zhangjg_blog/article/details/16116613#t1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值