Java的length&length()------简单易懂

  大家都习惯了使用IDE自动补全了,有些语法也就模模糊糊。例如length&length(),你是否仍然感觉他它俩一样吗?

  请你把我给的这两个算法题打出来:

给你一个整数数组 nums 。

如果一组数字 (i,j) 满足 nums[i] == nums[j] 且 i < j ,就可以认为这是一组 好数对 。

返回好数对的数目。

 

示例 1:

输入:nums = [1,2,3,1,1,3]
输出:4
解释:有 4 组好数对,分别是 (0,3), (0,4), (3,4), (2,5) ,下标从 0 开始
示例 2:

输入:nums = [1,1,1,1]
输出:6
解释:数组中的每组数字都是好数对
示例 3:

输入:nums = [1,2,3]
输出:0
 

提示:

1 <= nums.length <= 100
1 <= nums[i] <= 100

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/number-of-good-pairs
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
View Code
class Solution {
    public int numIdenticalPairs(int[] nums) {
        int res=0;
        for(int i = 0; i < nums.length; i++){
            for(int j = i + 1; j < nums.length; j++){
                if(nums[i] == nums[j])
                ++res;
                
            }
        }
        return res;
    }
}
View Code
给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的。

示例 1:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbcbcac"
输出: true
示例 2:

输入: s1 = "aabcc", s2 = "dbbca", s3 = "aadbbbaccc"
输出: false

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/interleaving-string
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
View Code
class Solution {
    public boolean isInterleave(String s1, String s2, String s3) {
        int n = s1.length(), m = s2.length(), t = s3.length();

        if (n + m != t) {
            return false;
        }

        boolean[][] f = new boolean[n + 1][m + 1];

        f[0][0] = true;
        for (int i = 0; i <= n; ++i) {
            for (int j = 0; j <= m; ++j) {
                int p = i + j - 1;
                if (i > 0) {
                    f[i][j] = f[i][j] || (f[i - 1][j] && s1.charAt(i - 1) == s3.charAt(p));
                }
                if (j > 0) {
                    f[i][j] = f[i][j] || (f[i][j - 1] && s2.charAt(j - 1) == s3.charAt(p));
                }
            }
        }

        return f[n][m];
    }
}
View Code

是否感觉到在LeetCode编程,不知道应该选哪一个length&length()?

那我们来一个简单的又易于理解的:

int[] arr = new int[5];
System.out.println(arr.length);//length for array
 
String str = "wuroc";
System.out.println(str.length());//length() for string

可以简单的看出,数组使用length。String类型使用length();

由此可以引出为什么String类没有length,数组没有length()?

Q1.Why array have length property?

数组的定义:数组只是相同类型的,用一个标识符名称封装到一起的一个对象序列或基本类型数据序列。---《Thinking In Java》

首先,数组是一个容器对象,其中包含固定数量的单一类型的值。创建数组后,其长度永不更改[1]。数组的长度可用作最终实例变量的长度。因此,长度可以视为数组的定义属性。

数组可以通过两种方法创建:

1)数组创建表达式

int[] a;

2)数组初始化程序。创建后,将指定大小。

int[] a = new int[rand.nextInt(20)];

上面的示例中使用了一个数组创建表达式。它指定元素类型,嵌套数组的级别数以及至少一个嵌套级别的数组长度。

该声明也是合法的,因为它指定了嵌套级别之一。

int[][] arr = new int[3][]

数组初始化器创建一个数组,并为其所有组件提供初始值。它以逗号分隔的表达式列表形式编写,并用大括号{}括起来。

int[] a = {w,u,r,o,c}

Q2.为什么没有定义类似于“字符串”的类“数组”?

Object obj = new int[10];

数组包含从Object类(克隆除外)继承的所有成员。为什么没有数组的类定义?

我们找不到Array.java文件。粗略的解释是它们对我们隐藏了。但String有类。

您可以考虑这个问题-如果有一个Array类,它将是什么样?它仍然需要一个数组来保存数组数据,对吗?

因此,定义这样的类不是一个好主意。

实际上,我们可以使用以下代码获取数组的类:

int[] a = new int[3];
System.out.println(arr.getClass());
class [I
Output

class[I]代表类对象“组件类型为int的数组”的运行时类型签名。

Q3.为什么String具有length()方法?

字符串的备份数据结构是一个char数组。无需定义并非每个应用程序都必需的字段。

与C不同,字符数组不是Java中的字符串。

String类有很多方法,方法都要带有()。所以我们的所有类的调用方法时,就需要用 .length();

当我们定义时,就可以创建一个String引用:

String s = “wuroc”;

也可以直接使用”new“:

String  s = new String("WuRoc");

并且在API1.8中:length()方法的含义是:

原文地址:https://www.cnblogs.com/WLCYSYS/p/13341163.html