《JAVA核心编程技术前十章8》由会员分享,可在线阅读,更多相关《JAVA核心编程技术前十章8(21页珍藏版)》请在金锄头文库上搜索。
1、新世纪应用型高等教育软件专业系列规划教材大连理工大学出版社大连理工大学出版社第8章Java泛型与Java集合8.1 java泛型8.3java泛型和java集合实训8.2 java集合8.1 Java 泛型泛型泛型是Java SE 5.0的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。但是与方法中的参数不同,泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。泛型类中的静态方法不能访问泛型
2、类的类型参数。8.1.1Java泛型基本概念泛型基本概念8.1 Java 泛型泛型设置通配符的上限,Java 5.0 引入泛型后extends关键字有了另外的含义,使用extends关键字可以设置泛型通配符的上限,形式如下:其中的通配符 ?表示一个受限制的通配符,此处的“?”意为 :通配符 “?”只能是 A类其子类作为泛型参数的泛型的的父类,而不再是任意类型参数泛型的父类。设置Java 泛型通配符的下限。设置Java 泛型通配符下限的关键字是super,此处的关键字super不再表示Java继承中的超类的概念。设置Java泛型通配符下限的形式如下:其中泛型通配符“?”表示一个受限的泛型通配符,
3、意为:通配符“ ?”只能是 A 类及其父类的作为参数的泛型的父类,而不再是任意类型作为参数的泛型的父类。 8.1.2Java泛型类型通配符泛型类型通配符8.1 Java 泛型泛型泛型不仅应用于整个类上。同样可以在类中包含参数化方法,而这个方法所在的类可以是泛型类,也可以不是泛型类。也就是说,是否拥有泛型方法,与其所在的类是否是泛型没有关系。泛型方法使得该方法能够独立于类而产生变化。以下是一个基本的指导原则:无论何时,只要你能做到,你就应该尽量使用泛型方法。也就是说,如果使用泛型方法可以取代将整个类泛型化,那么就应该只使用泛型方法,因为它可以使程序更简单明了。另外,对于一个static的方法而言
4、,无法访问泛型类的类型参数,所以,如果static方法需要使用泛型能力,就必须使其成为泛型方法。8.1.3Java泛型方法泛型方法8.1 Java 泛型泛型泛型方法的定义格式:访问权限修饰符访问权限修饰符返回类型返回类型方法名方法名(形参列表形参列表)与泛型类、泛型接口中的泛型类型参数不同,泛型方法中定义的泛型形参的作用域限于该方法内。而泛型类或泛型口中定义的泛型形参的作用域为整个类或接口。此外泛型方法在使用时无需传入泛型实参,这与泛型类和泛型接口也不同。8.1.3Java泛型方法泛型方法8.1 Java 泛型泛型Java 语言允许在使用泛型类时不指定泛型类型参数。如果没有为泛型类指定类型参数
5、,则该类型参数被退化成一个raw type(原始类型),退化后,默认成该类型参数声明时的第一个上限类型。当把泛型类的实例赋给一个非泛型引用变量时,则泛型类的泛型参数被檫除。退化成非泛型实例。8.1.4Java泛型擦出和转换泛型擦出和转换8.2 Java集合集合Java中的集合框架提供了一套设计优良的接口和类,使程序员操作成批的数据或对象元素极为方便。这些接口和类有很多对抽象数据类型操作的API,而这是我们常用的且在数据结构中熟知的。并且Java用面向对象的设计对这些数据结构和算法进行了封装,这就极大的减化了程序员编程时的负担。程序员也可以以这个集合框架为基础,定义更高级别的数据抽象,比如栈、队
6、列和线程安全的集合等,从而满足自己的需要。8.2 Java集合集合Java SE 5.0 增加了泛型支持很大程度上是为了让集合能记住其元素的数据类型。在没有泛型之前,一旦把一个对象“丢进”Java集合中,集合就会忘记对象的类型。把所有元素都当成Object类型处理。当程序从集合中取出元素后,需要进行强制类型转换,这种转化使得程序代码臃肿,转换不当会引发ClassCastException异常。Java SE 5.0改写了Java集合框架中全部接口和类,增加了泛型支持。8.2 Java集合集合8.2.1Java集合概述集合概述8.2 Java集合集合8.2.1Java集合概述集合概述8.2 Ja
7、va集合集合8.2.1Java集合概述集合概述8.2 Java集合集合8.2.1Java集合概述集合概述Java提供了非常复杂的集合类型,不易理解、掌握,通过一步简化Java集合框架非常有助于理解Java集合框架。从简化的Java集合框架图中看出,Java集合框架主要提供了3种类型的集合和1个迭代接口: 1. Set(集):集合中的对象无排列顺序,并且没有重复的对象。它的有些实现类能对集合中的对象按照特定的方式进行排序。set是最简单的一种集合,它的对象不按特定方式排序,只是简单的把对象加入集合中,就像往口袋里放东西。对集中成员的访问和操作是通过集中对象的引用进行的,所以集中不能有重复对象。2
8、. List(队列):集合中的对象按照索引的顺序排列,可以有重复的对象; 可以按照对象在集合中的索引位置检索对象。List与数组有些相似。8.2 Java集合集合8.2.1Java集合概述集合概述3. Map(映射):集合中的每一个元素都是一对一对的,包括一个key对象,一个Value对象(一个Key指向一个Value)。集合中没有重复的key对象,但是vaulue对象可以重复.它的有些实现类能对集合怀中的键对象进行排序。4. Iterator接口:Java集合框架中的Iterator接口对在编程中处理Java集合非常有用,Iterator接口封装了底层的数据结构,向用户提供了统一遍历集合的方
9、法。8.2 Java集合集合8.2.2Cllection和和Iterater接口接口方法方法描述描述booleanadd(Objectobj)向集合中添加一个对象voidclear()删除集合中所有的对象booleancontains(Objecto)判断在集合中是否包含特定的对象的引用booleanisEmpty()判断集合是否为空Iteratoriterator()返回一个Iterator类型的对象,用它来遍历集合booleanremove(Objecto)从集合中删除一个对象intsize()返回集合中元素的数量ObjecttoArray()返回一个对象的数组,该数组中包含集合中所有的元
10、素从上图可以看出,集合中最为重要的接口是Collection,在该接口中声明了对Java集合(List和Set)进行操作的方法,如表: 8.2 Java集合集合8.2.2Cllection和和Iterater接口接口而Iterator接口封装了底层的数据结构,向用户提供了统一遍历集合的方法,在Iterator接口中声明了如下的方法,见表:方法方法描述描述booleanhasNext()判断集合中是否还有下一个元素Object next()返回下一个元素voidremove()从集合中删除一个由next()方法返回的元素8.2 Java集合集合8.2.3Set接口接口Set最为主要的特征是集合中
11、的对象不按照特定的方式排序,并且没有重复的对象。它的主要实现类包括:1HashSet类按照哈希算法来存取集合中的对象,速度较快。类按照哈希算法来存取集合中的对象,速度较快。2LinkedHashSet类不仅实现了哈希算法,而且实现了链表的数据类不仅实现了哈希算法,而且实现了链表的数据结构,提高了插入和删除的功能。结构,提高了插入和删除的功能。3TreeSet类实现了类实现了SortedSet接口,具有排序的功能。接口,具有排序的功能。8.2 Java集合集合8.2.4List接口接口List主要特征是其元素以线型方式存储,集合中可以存放重复的对象List的主要实现类包括:ArrayList代表
12、长度可变的数组。可以对元素快速的随机访问。但是向ArratList插入或删除元素的速度较慢。LinkedList在实现中才用了链表的数据接口,对顺序访问进行了优化。向List中插入和删除数据的速度快,随即访问的速度较慢。8.2 Java集合集合8.2.5Map接口接口Map是一种把键对象和值对象进行映射的集合,他的每一个元素都包含一个键对象,一个值对象,键对象相当于值对象的索引,而且值对象仍然可以是Map类型的。它的主要实现类为:HashMap按照Hash算法来存取键对象,有很多的存取性能;为保证HashMap能正常工作。TreeMpa实现了SortedMap接口,能对键对象进行排序。8.3
13、Java泛型和泛型和Java集合综合实例集合综合实例下面的程序实现公共聊天室。程序架构为一个服务器端和多个客户端运行,服务器和每个客户端建立连接,然后接收客户端发送的消息,再转发个每个客户端。因此在服务器端同时有多个Socket实例对应每个客户端。使用Java 集合泛型类ArrayList 对象,存放每个客户端的Socket,每当由客户连接就把生成的Socket对象放进ArrayList对象中,当连接到服务器中的客户中有客户发送消息,服务器就遍历Arraylist 对象的成员,向对应的每个客户的Socklet转发消息。这样就构成一个群聊聊天软件。请按照上面的编程思路,编写一个群聊聊天软件服务器。程序使用TCP协议。本章小结本章小结Java泛型与Java集合是在Java语言中不易掌握的内容。本章通过简单明了的介绍,能使Java初学者迅速对Java泛型和Java集合框架有一个清晰的认识。Java泛型主要应用于Java集合框架。通过本章的学习,主要掌握Java泛型的概念、泛型类、泛型通配符、泛型方法、泛型擦出与泛型转换,以及Java集合框架的主要接口和实现类的使用。并能应用Java泛型和java集合解决一些具体问题。本章最后给出了一个非常有实用价值的Java泛型与Java集合的应用实例公共聊天室程序。实例代码简单,易于理解,仔细阅读对Java泛型与Java集合应用编程有一定的帮助。