数组:
声明一个引用该数组的变量,并指明整个变量可以引用的数组类型。声明一维数组的语法格式为:
type[] arrayName; // 数据类型[] 数组名;
声明了数组,只是得到了一个存放数组的变量,并没有为数组元素分配内存空间,不能使用。因此要为数组分配内存空间,这样数组的每一个元素才有一个空间进行存储。
简单地说,分配空间就是要告诉计算机在内存中为它分配几个连续的位置来存储数据。在 Java 中可以使用 new 关键字来给数组分配空间。分配空间的语法格式如下:
arrayName = new type[size]; // 数组名 = new 数据类型[数组长度];
注意:一旦声明了数组的大小,就不能再修改。这里的数组长度也是必需的,不能少。
集合
为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),Java 提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。Java 所有的集合类都位于 java.util 包下,提供了一个表示和操作对象集合的统一构架,包含大量集合接口,以及这些接口的实现类和操作它们的算法。
集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保存对象的引用变量,但通常习惯上认为集合里保存的是对象)。
Java 集合类型分为 Collection 和 Map,它们是 Java 集合的根接口,这两个接口又包含了一些子接口或实现类。图 1 和图 2 分别为 Collection 和 Map 的子接口及其实现类。
各个集合接口介绍
Collection接口常用方法
集合的遍历
Iterable接口源码:
Itorator源码:
public interface Iterator<E> {
//判断被遍历集合是否还有下一个元素
boolean hasNext();
//取集合下一个元素
E next();
//删除上一个next方法返回的元素
default void remove() {
throw new UnsupportedOperationException("remove");
}
//使用JAVA Lambda表达式遍历集合元素
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
- lterator对象称为迭代器(设计模式的一种),主要用于遍历Collection集合中的元素。GOF给迭代器模式的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。
- Collection接口继承了java.lang.lterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了lterator接口的对象。
- lterator仅用于遍历集合,lterator本身并不提供承装对象的能力。如果需要创建lterator对象,则必须有一个被迭代的集合。
- 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
注意:
- lterator可以删除集合的元素,但是是遍历过程中通过迭代器对象的remove方法,不是集合对象的remove方法。
- 如果还未调用next()或在上一次调用next方法之后已经调用了remove方法,再调用remove都会报lllegalStateException。