如何在Java中获取数组,集合或字符串的大小?

2022-09-02 11:45:59

我可以通过哪些不同的方式访问数组、集合(、等)和对象的长度?为什么它不同?ListSetString


答案 1

删节:

对于数组:使用 .length

对于 (or):请使用 .size()CollectionMap

对于 a(包括 、、、和):请使用 .length()。CharSequenceCharBufferSegmentStringStringBufferStringBuilder


阵 列

可以在数组上使用 .length 属性来访问它。尽管数组是动态创建的,但该属性的授权由 Java 语言规范 §10.3 定义Objectlength

数组由数组创建表达式 (§15.10) 或数组初始值设定项 (§10.6) 创建

数组创建表达式指定元素类型、嵌套数组的级别数以及至少一个嵌套级别的数组长度。数组的长度可用作最终实例变量长度

数组初始值设定项创建一个数组,并为其所有组件提供初始值。

由于数组的长度在未创建新的数组实例的情况下无法更改,因此无论对数组实例执行什么操作,重复访问 都不会更改值(除非将其引用替换为大小不同的数组)。.length

例如,要获取声明的一维数组的长度,可以这样写:

double[] testScores = new double[] {100.0, 97.3, 88.3, 79.9};
System.out.println(testScores.length); // prints 4

要获得 n 维数组中的长度,需要记住,它们一次访问数组的一个维度。

下面是一个二维数组的示例。

int[][] matrix
      = new int[][] {
                         {1, 2, 3, 4},
                         {-1, 2, -3, 4},
                         {1, -2, 3, -4}
    };

System.out.println(matrix.length); // prints 3 (row length or the length of the array that holds the other arrays)
System.out.println(matrix[0].length); // prints 4 (column length or the length of the array at the index 0)

这很重要,特别是在交错数组的情况下;列或行可能并不总是一直排成一行。

集合(、等)SetList

对于实现接口的每个对象,它们将具有一个名为 size() 的方法,用于访问集合的总体大小。Collection

与数组不同,集合的长度不是固定的,并且可以随时添加或删除元素。当且仅当列表本身添加了任何内容时,调用 将产生非零结果。size()

例:

List<String> shoppingList = new ArrayList<>();
shoppingList.add("Eggs");
System.out.println(shoppingList.size()); // prints 1

某些集合可能会拒绝添加元素,因为它是 ,或者它是重复的(在 a 的情况下)。在这种情况下,重复添加到集合中不会导致大小增加。nullSet

例:

Set<String> uniqueShoppingList = new HashSet<>();
uniqueShoppingList.add("Milk");
System.out.println(uniqueShoppingList.size()); // prints 1
uniqueShoppingList.add("Milk");
System.out.println(uniqueShoppingList.size()); // prints 1

访问 * 的大小与锯齿状数组类似:List<List<Object>>

List<List<Integer>> oddCollection = new ArrayList<>();
List<Integer> numbers = new ArrayList<Integer>() {{
    add(1);
    add(2);
    add(3);
}};
oddCollection.add(numbers);
System.out.println(oddCollection.size()); // prints 1
System.out.println(oddCollection.get(0).size()); // prints 3

*:集合在其接口中没有定义 get 方法。

顺便说一句,a 不是 ,但它也定义了 size() 方法。这仅返回 中包含的键值对的数量。MapCollectionMap

String

A 定义了一个方法 length()。它的作用是打印 该实例中存在的字符数。StringString

例:

System.out.println("alphabet".length()); // prints 8

答案 2

不要忘记从共享资源库,它的空安全,所以你不必事先进行空检查。CollectionUtils.size()