预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共101页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

一、为什么要引入容器类?2、数组是编译器支持的类型,很高效, 但不够灵活(固定大小和固定类型) ★这带来一个问题:在写程序时,你并不 知道将需要多少个对象,或者是否需要 更复杂的方式来存储对象3、Java内库提供一套相当完整的容器类来 解决这些问题 ★例如:List、Set、Queue和Map ◆在这些容器类中,Java提供了许多非常 有用的工具1、泛型(Generics)的概念 ★泛型是指通过参数化类型,使代码适用 于许许多多的类型 ◆复习:C++中的类模板2、使用预定义的泛型 ★典例分析:ArrayList<Apple>apples ◆仔细分析该代码的完整含义★典例分析:ArrayList<Apple>apples 1、首先分析:ArrayListapples ◆inti;//声明一个整型变量i ◆ArrayListapples;//声明一个ArrayList类 的对象apples2、其次,我们注意到: ◆在Java中,所有对对象的操纵都必须通过引用 ◆所以,声明一个ArrayList类的对象apples 更准确的描述应该是: 声明一个指向ArrayList类对象的引用apples3、最后,完整分析:ArrayList<Apple>apples ◆声明一个指向ArrayList类对象的引用apples ◆而该ArrayList容器用来保存Apple对象★//下面是完整程序,参见P217 classApple{…} classOrange{…} publicclassApplesWithGenerics { publicstaticvoidmain(String[]args) {★ArrayList<Apple>apples =newArrayList<Apple>(); ★new关键字的重要作用: ⑴申请存储空间 ⑵创建对象并使用构造函数初始化 ⑶返回指向该对象的一个引用★for(inti=0;i<3;i++) apples.add(newApple)); ★类型安全是指不能加入其它类型 ⑴可以任意添加Apple对象 ⑵但是不能添加Orange对象★JavaSE5之前的容器存在的问题: ◆以前容器保存的是Object对象,所以编译时允许 向容器中添加不正确的类型 ◆但这会产生运行时异常 ★JavaSE5引入泛型(Generics),可以解决这个 问题,泛型机制将运行时异常转变为编译时错误★归纳:使用泛型的优点 ⑴编译器可以检查放置到容器中的对象类型 ⑵使用容器中的对象时,可以使用更加清晰的语法 (例如:不需要强制转型,更清晰的使用foreach) ⑶向上转型也可以在泛型中很好的工作★//使用传统的语法 for(inti=0;i<apples.size();i++) print(apples.get(i)…); //使用更为方便的Foreach语法 for(Applec:apples) print(…); } }1、Collection家族和Map家族 ★Map接口:一组成对的键值对对象 ◆Map是强大的编程工具,也称为字典, 因为你可以使用键对象来查找值对象2、使用接口的一般方式 ★创建一个具体类的对象,将其向上转型 为对应的接口,然后在其余的代码中都 使用这个接口★典例分析:List<Apple>apples =newLinkedList<apple>() 1、首先分析:Listapples ◆声明一个指向实现了List接口的类对象的引用 apples ◆简称为:声明一个指向List接口的引用apples★典例分析:List<Apple>apples =newLinkedList<apple>() 2、其次分析:List<Apple>apples ◆声明一个指向List接口的引用apples ◆该List容器用来保存Apple对象★典例分析:List<Apple>apples =newLinkedList<apple>() 3、再其次分析:=newLinkedList<apple>() ◆申请存储空间 ◆创建对象并使用构造函数初始化 ◆返回指向该对象的一个引用★典例分析:List<Apple>apples =newLinkedList<apple>() 4、最后,综合分析和归纳如下: ◆创建对象并返回对该对象的引用 ◆将该引用(所指向的对象)向上转型为: 指向List接口的引用(所指向的对象)★特别提醒:这种方式并非总能奏效,因为某些类 具有额外的功能 ◆例如:LinkedList具有在List接口中并未包含的 额外方法 ◆所以,如果你需要使用这些方法,就不能将它们 向上转型为更通用的接口★//完整的程序,参见P219 publicclassSimpl