为了解决数组在实际的开发过程中所遇到的问题,JAVA提供了一系列特殊的类,这些类可以存储任意类型的对象,并且长度可变,统称为集合

集合怎么用?

集合封装了若干方法——定义了一个集合类型的变量之后,我们可以完成“向该集合变量添加元素”“获取指定下标位置上的元素”等操作。

集合的分类

集合按其存储结构可分为两大类:一类是存储“单个对象”(单列集合Collection),一类是存储“key-value对”(双列集合Map)。集合的主要接口都是由这两个接口派生出来的——Collection和Map是Java集合框架的跟接口,每一个接口又包含了一些子接口和实现类。

Collection接口

Collection是所有单列集合的父类接口。
定义形式:public interface Collection ;

继承体系

Collection包含两个重要的子接口:List和Set。

java collections javacollections接口_泛型

Collection接口的方法

方法声明

功能描述

boolean add(Object o)

向集合中添加一个元素

boolean addAll(Collection c)

将指定Collection中的所有元素添加到该集合中

void clear()

删除该集合中的所有元素

boolean remove(Object o)

删除该集合中指定的元素

boolean removeAll(Collection c)

删除指定集合中的所有元素

boolean isEmpty()

判断该集合是否为空

boolean contains(Object o)

判断该集合中是否包含某个元素

boolean contains(Collection c)

判断该集合中是否包含指定集合中的所有元素

Iterator iterator()

返回在该集合的元素上进行迭代的迭代器(Iterator) ,用于遍历该集合搜友元素

int size()

获取该集合元素个数

这些方法可用于操作所有的单列集合。

泛型

集合可以储存任何的引用类型。但这样会使得当有错误的数据输入时,没有办法在编译期间进行检查和控制,在使用上很难确保安全性。

public class ParameterType{
	public static void main(String[] args){
		ArrayList list=new ArrayList();
		Teachers tch1=new Teachers("FY0002010");
		Teachers tch2=new Teachers("FY0002013");
		Students stu1=new Students("20100011");
		Students stu2=new Students("20100012");
		list.add(tch1);
		list.add(tch2);
		list.add(stu1);
		list.add(stu2);//无论是Trachers类的对象还是Students类的对象,存入集合后会统一被“记”为Object
		for(int i=0;i<list.size();i++){
			Teachers tch=(Teachers)list.get(i);//集合元素要调用Teachers类的work方法,必须向下转型为Teachers类的对象;
			//若某个集合元素不是Teachers对象,运行时就要出现异常。
			tch.work();
		}
	}
}

为此Java提供了泛型来解决这个问题。

  • 泛型:即参数化数据类型的能力,是指在创建类、接口或方法允许操作的数据类型。
  • 格式:ArrayList< Integer > List=new ArrayList < Integer >();
  • 注:泛型必须是引用类型(类/包装类、接口、数组、枚举),不能是int、double之类的基本数据类型;
public class ParameterType{
	public static void main(String[] args){
		ArrayList<Teachers> list=new ArrayList<Teachers>();
		Teachers tch1=new Teachers("FY0002010");
		Teachers tch2=new Teachers("FY0002013");
		Students stu1=new Students("20100011");
		Students stu2=new Students("20100012");
		list.add(tch1);
		list.add(tch2);
		*list.add(stu1);//出错提示:类型不符
		*list.add(stu2);//出错提示:类型不符
		for(int i=0;i<list.size();i++){
			Teachers tch=(Teachers)list.get(i);
			tch.work();
		}
	}
}

泛型的优点:能够在编译时而不是在运行时检查类型安全。