简略:
对于数组:使用.length。
对于Collection(或Map):使用.size()。
对于一个CharSequence(其包括CharBuffer,Segment,String,StringBuffer,和StringBuilder):使用.length()。
数组
可以使用数组上的.length属性来访问它。尽管数组是动态创建的Object,但length属性的任务是由Java语言规范§10.3定义的:
数组由数组创建表达式(第15.10节)或数组初始值设定项(第10.6节)创建。
数组创建表达式指定至少一个嵌套级别的元素类型,嵌套数组的级别数和数组的长度。数组的长度可用作最终实例变量length。
数组初始值设定项创建一个数组并为其所有组件提供初始值。
由于数组的长度在没有创建新数组实例的情况下.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)
这一点很重要,特别是在锯齿状阵列的情况下; 列或行可能并不总是排队。
集合(Set,List等)
对于实现Collection接口的每个对象,它们都有一个调用的方法size(),用于访问集合的整体大小。
与数组不同,集合的长度不固定,并且可以随时添加或删除元素。size()当且仅当列表本身添加了任何内容时,调用才会产生非零结果。
例:
List shoppingList = new ArrayList<>();
shoppingList.add("Eggs");
System.out.println(shoppingList.size()); // prints 1
某些集合可能会拒绝添加元素,无论是因为它null还是重复(在a的情况下Set)。在这种情况下,重复添加集合不会导致大小增加。
例:
Set uniqueShoppingList = new HashSet<>();
uniqueShoppingList.add("Milk");
System.out.println(uniqueShoppingList.size()); // prints 1
uniqueShoppingList.add("Milk");
System.out.println(uniqueShoppingList.size()); // prints 1
访问a List>* 的大小是以与锯齿状数组类似的方式完成的:
List> oddCollection = new ArrayList<>();
List numbers = new ArrayList() {{
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
*: Collection没有get在其界面中定义的方法。
另外,a Map不是a Collection,但它也有一个size()定义的方法。这只是返回包含在中的键值对的数量Map。
String
A String有一个定义的方法length()。它的作用是打印该实例中存在的字符数String。
例:
System.out.println("alphabet".length()); // prints 8