版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第8章Java泛型与Java集合8.1java泛型8.3java泛型和java集合实训8.2java集合8.1Java泛型泛型是JavaSE5.0的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。但是与方法中的参数不同,泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。泛型类中的静态方法不能访问泛型类的类型参数。8.1.1Java泛型基本概念8.1Java泛型设置通配符的上限,Java5.0引入泛型后extends关键字有了另外的含义,使用extends关键字可以设置泛型通配符的上限,形式如下:
<?extendsA>其中的通配符?表示一个受限制的通配符,此处的“?”意为:通配符“?”只能是A类其子类作为泛型参数的泛型的的父类,而不再是任意类型参数泛型的父类。设置Java泛型通配符的下限。设置Java泛型通配符下限的关键字是super,此处的关键字super不再表示Java继承中的超类的概念。设置Java泛型通配符下限的形式如下:
<?superA>其中泛型通配符“?”表示一个受限的泛型通配符,意为:通配符“?”只能是A类及其父类的作为参数的泛型的父类,而不再是任意类型作为参数的泛型的父类。8.1.2Java泛型类型通配符8.1Java泛型泛型不仅应用于整个类上。同样可以在类中包含参数化方法,而这个方法所在的类可以是泛型类,也可以不是泛型类。也就是说,是否拥有泛型方法,与其所在的类是否是泛型没有关系。泛型方法使得该方法能够独立于类而产生变化。以下是一个基本的指导原则:无论何时,只要你能做到,你就应该尽量使用泛型方法。也就是说,如果使用泛型方法可以取代将整个类泛型化,那么就应该只使用泛型方法,因为它可以使程序更简单明了。另外,对于一个static的方法而言,无法访问泛型类的类型参数,所以,如果static方法需要使用泛型能力,就必须使其成为泛型方法。8.1.3Java泛型方法8.1Java泛型泛型方法的定义格式:访问权限修饰符<T,S,…>返回类型方法名(形参列表){
}与泛型类、泛型接口中的泛型类型参数不同,泛型方法中定义的泛型形参的作用域限于该方法内。而泛型类或泛型口中定义的泛型形参的作用域为整个类或接口。此外泛型方法在使用时无需传入泛型实参,这与泛型类和泛型接口也不同。8.1.3Java泛型方法8.1Java泛型
Java语言允许在使用泛型类时不指定泛型类型参数。如果没有为泛型类指定类型参数,则该类型参数被退化成一个rawtype(原始类型),退化后,默认成该类型参数声明时的第一个上限类型。当把泛型类的实例赋给一个非泛型引用变量时,则泛型类的泛型参数被檫除。退化成非泛型实例。8.1.4Java泛型擦出和转换8.2Java集合
Java中的集合框架提供了一套设计优良的接口和类,使程序员操作成批的数据或对象元素极为方便。这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结构中熟知的。并且Java用面向对象的设计对这些数据结构和算法进行了封装,这就极大的减化了程序员编程时的负担。程序员也可以以这个集合框架为基础,定义更高级别的数据抽象,比如栈、队列和线程安全的集合等,从而满足自己的需要。8.2Java集合
JavaSE5.0增加了泛型支持很大程度上是为了让集合能记住其元素的数据类型。在没有泛型之前,一旦把一个对象“丢进”Java集合中,集合就会忘记对象的类型。把所有元素都当成Object类型处理。当程序从集合中取出元素后,需要进行强制类型转换,这种转化使得程序代码臃肿,转换不当会引发ClassCastException异常。
JavaSE5.0改写了Java集合框架中全部接口和类,增加了泛型支持。8.2Java集合8.2.1Java集合概述8.2Java集合8.2.1Java集合概述8.2Java集合8.2.1Java集合概述8.2Java集合8.2.1Java集合概述
Java提供了非常复杂的集合类型,不易理解、掌握,通过一步简化Java集合框架非常有助于理解Java集合框架。从简化的Java集合框架图中看出,Java集合框架主要提供了3种类型的集合和1个迭代接口:
1.Set(集):集合中的对象无排列顺序,并且没有重复的对象。它的有些实现类能对集合中的对象按照特定的方式进行排序。set是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。
2.List(队列):集合中的对象按照索引的顺序排列,可以有重复的对象;可以按照对象在集合中的索引位置检索对象。List与数组有些相似。8.2Java集合8.2.1Java集合概述
3.Map(映射):集合中的每一个元素都是一对一对的,包括一个key对象,一个Value对象(一个Key指向一个Value)。集合中没有重复的key对象,但是vaulue对象可以重复.它的有些实现类能对集合怀中的键对象进行排序。
4.Iterator接口:Java集合框架中的Iterator接口对在编程中处理Java集合非常有用,Iterator接口封装了底层的数据结构,向用户提供了统一遍历集合的方法。8.2Java集合8.2.2Cllection和Iterater接口方法描述boolean
add(Object
obj)向集合中添加一个对象voidclear()删除集合中所有的对象boolean
contains(Object
o)判断在集合中是否包含特定的对象的引用boolean
isEmpty()判断集合是否为空Iterator
iterator()返回一个Iterator类型的对象,用它来遍历集合boolean
remove(Object
o)从集合中删除一个对象int
size()返回集合中元素的数量Object[]toArray()返回一个对象的数组,该数组中包含集合中所有的元素从上图可以看出,集合中最为重要的接口是Collection,在该接口中声明了对Java集合(List和Set)进行操作的方法,如表:8.2Java集合8.2.2Cllection和Iterater接口而Iterator接口封装了底层的数据结构,向用户提供了统一遍历集合的方法,在Iterator接口中声明了如下的方法,见表:方法描述boolean
hasNext()判断集合中是否还有下一个元素Objectnext()返回下一个元素voidremove()从集合中删除一个由next()方法返回的元素8.2Java集合8.2.3Set接口
Set最为主要的特征是集合中的对象不按照特定的方式排序,并且没有重复的对象。它的主要实现类包括:
1.HashSet类按照哈希算法来存取集合中的对象,速度较快。
2.LinkedHashSet类不仅实现了哈希算法,而且实现了链表的数据结构,提高了插入和删除的功能。
3.TreeSet类实现了SortedSet接口,具有排序的功能。8.2Java集合8.2.4List接口
List主要特征是其元素以线型方式存储,集合中可以存放重复的对象List的主要实现类包括:ArrayList代表长度可变的数组。可以对元素快速的随机访问。但是向ArratList插入或删除元素的速度较慢。LinkedList在实现中才用了链表的数据接口,对顺序访问进行了优化。向List中插入和删除数据的速度快,随即访问的速度较慢。8.2Java集合8.2.5Map接口
Map是一种把键对象和值对象进行映射的集合,他的每一个元素都包含一个键对象,一个值对象,键对象相当于值对象的索引,而且值对象仍然可以是Map类型的。它的主要实现类为:HashMap按照Hash算法来存取键对象,有很多的存取性能;为保证HashMap能正常工作。TreeMpa实现了SortedMap接口,能对键对象进行排序。8.3Java泛型和Java集合综合实例下面的程序实现公共聊天室。程序架构为一个服务器端和多个客户端运行,服务器和每个客户端建立连接,然后接收客户端发送的消息,再转发个每个客户端。因此在服务器端同时有多个Socket实例对应每个客户端。使用Java集合泛型类ArrayList<T>对象,存放每个客户端的Socket,每当由客户连接就把生成的Socket对象放进ArrayList对象中,当连接到服务器中的客户中有客户发送消息,服务器就遍历Arraylist
对象的成员,向对应的每个客户的Socklet转发消息。这样就构成一个群聊聊天软件。请按照上面的编程思路,编写一个群聊聊天软件服务器。程序使用TCP协议。本章小结
Java泛型与Java集合是在Java语言中不易掌握的内容。本章通过简单明了的介绍,能使Java初学者迅速对Java泛型和Java集合框架有一个清晰的认识。
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五版无人驾驶技术研发公司股权转让及合作生产合同3篇
- 二零二五年网络安全违约责任承担详细合同解析3篇
- 二零二五年钢板桩租赁与施工方案优化合同3篇
- 二零二五版水电安装工程节能改造与施工合同2篇
- 二零二五版房产代持权违约责任合同范本3篇
- 二零二五年窗帘艺术中心窗帘定制合同3篇
- 二零二五年度高品质地暖系统安装与维护服务合同书2篇
- 二零二五版海洋工程建设项目担保合同3篇
- 二零二五年度酒店窗帘改造升级合同2篇
- 二零二五版服务器租赁与云存储解决方案合同3篇
- GB/T 24479-2023火灾情况下的电梯特性
- 鼻空肠管的护理
- ICH Q3D元素杂质指导原则
- 五年级解方程计算题100道
- 汉语教学 《成功之路+进步篇+2》第16课课件
- GB/T 20028-2005硫化橡胶或热塑性橡胶应用阿累尼乌斯图推算寿命和最高使用温度
- 广州新版四年级英语下册-复习计划
- 地震工程学概论课件
- 小学语文三年级下册生字偏旁、拼音、组词
- 2022年宁波开发投资集团有限公司招聘笔试题库及答案解析
- 论财务共享服务模式下财务稽核体系
评论
0/150
提交评论