集合
为了保存数量不确定的数据,以及保存具有映射关系的数据(也被称为关联数组),Java提供了集合类,集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。所有集合类都位于java.util包下。
Java的集合类主要由两个接口派生而出:Collection和Map
Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。
Collection集合:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是List和Set。
Map集合:双列集合类的根接口,用于存储具有键(Key)、值(Value)映射关系的元素,每个元素都包含一对键值,在使用Map集合时可以通过指定的Key找到对应的Value。
Collection接口
Collection接口是List、Set和Queue接口的父接口,该接口里定义的方法既可用于操作Set集合,也可用于操作List和Queue集合。
Collection提供了大量添加、删除、访问的方法来访问集合元素。
List接口
List接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象称为List集合。在List集合中允许出现重复的元素,所有的元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序一致。
List作为Collection集合的子接口,不但继承了Collection接口中的全部方法,而且还增加了一些根据元素索引来操作集合的特有方法
ArrayList集合
java.util.ArrayList
ArrayList是List接口的一个实现类,在ArrayList内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。
ArrayList集合中大部分方法都是从父类Collection和List继承过来的,其中add()方法和get()方法用于实现元素的存取。
在JDK1.5版本之后,提出了泛型机制,语法如下:
类名<T>
T代表一个类型的名称,只能是类类型,包括自定义类,不能使基本类型
Object类为根类,很多程序员为了使程序更为通用,设计程序时通常使传入的值与返回的值都以Object类型为主,当需要使用这些实例时,必须正确地将该实例转换为原来的类型,否则运行时将会发生ClassCastException异常。
在声明类的同时定义该类所使用的泛型,则这个类被称作泛型类。
E用于描述一种具体的类型,这种类型需要在构造ArrayList实例对象时指定。
(1)创建ArraysList实例
ArrayList<T> list=new ArrayList<T>();
(2)向ArraysList中保存数据
(3)其他常用方法
foreach循环
JDK5.0 开始提供foreach循环,是一种更简洁的for循环,也称增强for循环,用于遍历数组或集合中的元素。
语法格式:
for(容器中元素类型 临时变量:容器变量){
循环体
}
与for循环相比,foreach循环不需要获得容器的长度,也不需要根据索引访问容器中的元素,但它会自动遍历容器中的每个元素,其循环次由容器中元素的个输入决定,每次循环时,foreach中通过变量将当前循环的元素记住,并对其进行操作。
注意:
当时用foreach循环遍历集合和数组时,只能访问集合中的元素,不能对其中的元素进行修改。
foreach循环举例:
public class Ex{
public static void main(String args[]){
String strs[]={"aaa","bbb","ccc"};
//foreach循环遍历数组
for(String str: strs){ str="ddd"; }
System.out.println("foreach循环修改后的数组:");
for(String s:strs){ System.out.print(s+" "); }
System.out.println();
//for循环遍历数组
for(int i=0;i<strs.length;i++){ strs[i]="ddd"; }
System.out.println("普通for循环修改后的数组:");
for(String s:strs){ System.out.print(s+" "); }
}
}
本程序的运行结果是:
Tforeach循环修改后的数组:
aaa bbb ccc
普通for循环修改后的数组:
ddd ddd ddd