




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、J a v a 语 言 程 序 设 计 ( 第 2 版 )14.1 Java14.1 Java泛型泛型-ComparableT-Comparable 与与ComparatorComparator接口接口14.2 Collection API14.2 Collection API简介简介14.2.1 Collection14.2.1 Collection接口接口14.2.2 Set14.2.2 Set接口接口14.2.3 List14.2.3 List接口接口14.3 Collections14.3 Collections类类14.4 Map14.4 Map接口及实现层次接口及实现层次J a v
2、 a 语 言 程 序 设 计 ( 第 2 版 )14.1 Java14.1 Java泛型泛型 -参数化类型 public class Examplepublic class Example /T/T为类型参数为类型参数 private private T T obj; / obj; /定义泛型成员变量定义泛型成员变量 public Example( public Example(T T obj) obj) this.obj = obj; this.obj = obj; public public T T getObj( ) getObj( ) return obj; return obj; 【
3、例14-1】 J a v a 语 言 程 序 设 计 ( 第 2 版 )【例14-1】续 public void showType( ) System.out.println(T的实际类型是: + obj.getClass( ).getName( ); public static void main(String args) Example str=new Example(Generic class example!); str.showType( ); String s = str.getObj( ); System.out.println(value= + s); J a v a 语 言
4、程 序 设 计 ( 第 2 版 )泛型在使用中的规则和限制:(1)泛型的类型参数只能是类类型(包括自定义类),不能是简单类型。(2)泛型的类型参数可以有多个,如Map。(3)泛型的参数类型可以使用extends语句。例如,extends并不代表继承,它是类型范围限制,表示TNumber。(4)泛型的参数类型还可以是通配符类型。例如,ArrayList,表示Number范围的某个类型,其中,“?”代表未定类型。 (5) 泛型的参数类型还可以使用super子句。例如, ,表示T或者T的父类型。 J a v a 语 言 程 序 设 计 ( 第 2 版 )泛型方法:泛型方法:与其所在的类是否泛型没有关
5、系。与其所在的类是否泛型没有关系。 要定义泛型方法,只需将要定义泛型方法,只需将泛型参数列表置于返回值前泛型参数列表置于返回值前。public class public class ExampleAExampleA public public void f(void f(T T x) x) System.out.printlnSystem.out.println( (x.getClassx.getClass().().getNamegetName();(); public static void main(String public static void main(String argsar
6、gs) ) ExampleAExampleA eaea = new = new ExampleAExampleA();(); ea.fea.f( );( ); ea.fea.f(10);(10); java.lang.Stringjava.lang.IntegerJ a v a 语 言 程 序 设 计 ( 第 2 版 )class Example class Example public String add(T a,T b) public String add(T a,T b) return a.toString()+b.toString(); return a.toString()+b.t
7、oString(); public class Test public class Test public static void main(String args) public static void main(String args) Example x= new Example(); Example x= new Example(); System.out.println(x.add(123,543); System.out.println(x.add(123,543); Example y= new Example(); Example y= new Example(); Syste
8、m.out.println(y.add(12,25); System.out.println(y.add(12,25); 写出程序运行结果写出程序运行结果1235431225J a v a 语 言 程 序 设 计 ( 第 2 版 )14.1.2 14.1.2 关于关于ComparableComparable与与ComparatorComparator接口接口JavaJava提供了两个接口定义对数组或集合中对象进行排序,提供了两个接口定义对数组或集合中对象进行排序,实现此接口的对象数组或列表可以通过实现此接口的对象数组或列表可以通过Arrays.sortArrays.sort或或Collecti
9、ons.sortCollections.sort进行自动排序。进行自动排序。1. Comparable1. Comparable接口接口 Comparable Comparable接口定义了如下方法:接口定义了如下方法: int compareTo(T obj); int compareTo(T obj); 功能是将当前对象与参数功能是将当前对象与参数objobj进行比较,在当前对象小于、进行比较,在当前对象小于、等于或大于指定对象等于或大于指定对象objobj时,分别返回负整数、零或正整时,分别返回负整数、零或正整数。数。J a v a 语 言 程 序 设 计 ( 第 2 版 )【例例14-
10、214-2】 让让UserUser对象按年龄排序对象按年龄排序#02 #02 public class User implements Comparable public class User implements Comparable . /. /省略属性、构造方法、省略属性、构造方法、toStringtoString方法方法#19 #19 public int compareTo(User obj) public int compareTo(User obj) #20 #20 return this.age - obj.age;return this.age - obj.age;#21 #
11、21 #23 #23 public static void main(String args) public static void main(String args) #24 #24 User users = new User(User users = new User(张三张三, 30), , 30), new User( new User(李四李四, 20) ;, 20) ;#25 #25 Arrays.sort(users)Arrays.sort(users); ; #26 #26 for (int i = 0; i users.length; i+)for (int i = 0; i
12、 users.length; i+)#27 #27 System.out.println(usersi);System.out.println(usersi);#28 #28 #29 #29 【运行结果运行结果】李四李四: 20: 20张三张三: 30: 30J a v a 语 言 程 序 设 计 ( 第 2 版 )2. Comparator2. Comparator接口接口 Comparator Comparator 接口中定义了如下方法:接口中定义了如下方法: intint compare(T obj1, T obj2); compare(T obj1, T obj2); 当当obj1ob
13、j1小于、等于或大于小于、等于或大于obj2obj2时时, ,分别返回负整数、零或正分别返回负整数、零或正整数。整数。 Comparator Comparator接口可以看成一种对象比较算法的实现,不接口可以看成一种对象比较算法的实现,不妨称为妨称为“比较算子比较算子”,它将算法和数据分离。,它将算法和数据分离。ComparatorComparator接口常用于以下两种环境:接口常用于以下两种环境:(1)(1)类的设计师没有考虑到比较问题,因而没有实现类的设计师没有考虑到比较问题,因而没有实现ComparableComparable接口,接口,可以通过可以通过ComparatorCompara
14、tor比较算子来实现排序而不必改变对象本身比较算子来实现排序而不必改变对象本身; ;(2)(2)对象排序时要用多种排序标准,比如升序、降序等,只要在执行对象排序时要用多种排序标准,比如升序、降序等,只要在执行sortsort方法时用不同的方法时用不同的ComparatorComparator比较算子就可适应变化。比较算子就可适应变化。J a v a 语 言 程 序 设 计 ( 第 2 版 ) 假设假设UserUser类没有实现类没有实现ComparableComparable接口,可采用接口,可采用UserComparatorUserComparator比较算子提供的方法实现排序比较算子提供的
15、方法实现排序public class UserComparator implements Comparator public class UserComparator implements Comparator public int compare(User obj1, User obj2) public int compare(User obj1, User obj2) return . compareTo();return . compareTo(); public static void main(String ar
16、gs) public static void main(String args) User users = new User(mary, 25), User users = new User(mary, 25), new User(John, 40) ; new User(John, 40) ;Arrays.sort(users, new UserComparator( );Arrays.sort(users, new UserComparator( ); / / 用比较算子排序用比较算子排序for (int i = 0; i users.length; i+)for (int i = 0;
17、i users.length; i+)System.out.println(usersi);System.out.println(usersi); J a v a 语 言 程 序 设 计 ( 第 2 版 )14.2 Collection API简介J a v a 语 言 程 序 设 计 ( 第 2 版 )(1 1)CollectionCollection接口接口 boolean add(Object o) boolean add(Object o) boolean boolean contains(Object o)contains(Object o) boolean isEmpty() bo
18、olean isEmpty() Iterator iterator() Iterator iterator() :boolean remove(Object o) boolean remove(Object o) int size() int size() Object toArray() Object toArray() void clear() void clear() (whether it removed an item)(whether it succeeded)J a v a 语 言 程 序 设 计 ( 第 2 版 )IteratorIterator接口接口 boolean has
19、Next() boolean hasNext() 判断容器中是否存在下一个可访问元素判断容器中是否存在下一个可访问元素 Object nextObject next()() 返回要访问的下一个元素返回要访问的下一个元素 void remove() void remove() 用于删除迭代子返回的最后一个元素。该方法只能在每次用于删除迭代子返回的最后一个元素。该方法只能在每次执行执行next()next()后执行一次后执行一次 J a v a 语 言 程 序 设 计 ( 第 2 版 )Iteratorsfor ( String for ( String strstr : items) : ite
20、ms) System.out.printSystem.out.print( (strstr + , ); + , );Iterator Iterator iteriter = = items.iteratoritems.iterator();();while (while (iter.hasNextiter.hasNext()() String String strstr = = iter.nextiter.next();(); System.out.printSystem.out.print( (strstr + , );+ , ); J a v a 语 言 程 序 设 计 ( 第 2 版
21、)是数学上集合模型的抽象,特点有两个:一是是数学上集合模型的抽象,特点有两个:一是不含重复元不含重复元素素,二是,二是无序无序 类似于数学上的数列模型,也称序列。其特点是类似于数学上的数列模型,也称序列。其特点是可含重复元素可含重复元素,而且是,而且是有序有序的。用户可以控制向的。用户可以控制向序列中某位置插入元素。并可按元素的顺序访问序列中某位置插入元素。并可按元素的顺序访问它们。它们。 J a v a 语 言 程 序 设 计 ( 第 2 版 )例例14-3 Set14-3 Set接口用法接口用法 import java.util.*; public class TestSet public
22、 static void main(String args) Set h = new Set h = new HashSetHashSet();();h.addh.add( (Str1Str1););h.addh.add(good);(good);h.addh.add( (Str1Str1););h.addh.add(new String(new String(Str1Str1););System.out.printlnSystem.out.println(h);(h); good ,Str1good ,Str1J a v a 语 言 程 序 设 计 ( 第 2 版 )表14-2 List接口
23、中定义的常用方法方方 法法功功 能能void add(E void add(E elemelem) )在尾部添加元素在尾部添加元素void void add(add(intint pospos, E , E elemelem) )在指定位置增加元素在指定位置增加元素E E getget( (intint pospos) )获取指定位置元素获取指定位置元素E setE set( (intint pospos, E , E elemelem) )修改指定位置元素修改指定位置元素E E remove(remove(intint pospos) )删除指定位置元素删除指定位置元素intint inde
24、xOfindexOf(Object (Object objobj, , intint start_posstart_pos) )从某位置开始向后查找元素位置从某位置开始向后查找元素位置intint lastIndexOflastIndexOf(Object (Object objobj, , intint start_posstart_pos) )从某位置开始由尾向前查找元素位置从某位置开始由尾向前查找元素位置ListIteratorListIterator listIteratorlistIterator()()返回列表的返回列表的ListIteratorListIterator对象对象(r
25、eturns the item removed)J a v a 语 言 程 序 设 计 ( 第 2 版 )1 1ArrayListArrayList类和类和LinkedListLinkedList类类import java.util.*;public class TestList public static void main(String args ) ArrayList a=new ArrayList( ); a.add(new Integer(12); a.add(new Integer(15); a.add(23); /自动包装转换 output(a); ArrayList b=new
26、 ArrayList( ); b.add(new Double(1.2); b.add(new Double(2.45); output(b); 【例14-4】 ArrayList的使用J a v a 语 言 程 序 设 计 ( 第 2 版 ) static void output(ArrayList a) Iterator p = a.iterator( ); while (p.hasNext( ) System.out.print(p.next( )+ , ); System.out.println( ); J a v a 语 言 程 序 设 计 ( 第 2 版 )【例例14-514-5】
27、 ArrayList ArrayList和和LinkedListLinkedList的使用测试。的使用测试。import java.util.import java.util.* *; ; public class ListDemo public class ListDemo static final int N = 50000; static final int N = 50000; static long timeList(List st) static long timeList(List st) long start = System.currentTimeMillis( ); lon
28、g start = System.currentTimeMillis( ); for (int i = 0; i N; i+) for (int i = 0; i N; i+) st.add(0, new Integer(i); st.add(0, new Integer(i); return System.currentTimeMillis( ) - start; return System.currentTimeMillis( ) - start; public static void main(String args ) public static void main(String ar
29、gs ) System.out.println(time for ArrayList = + System.out.println(time for ArrayList = + timeList(new ArrayList( ); timeList(new ArrayList( ); System.out.println(time for LinkedList = + System.out.println(time for LinkedList = + timeList(new LinkedList( ); timeList(new LinkedList( ); 修改为add(obj),如何?
30、J a v a 语 言 程 序 设 计 ( 第 2 版 )写出程序运行结果写出程序运行结果import import java.utiljava.util. .* *; ;public class Test2 public class Test2 public static void main(String public static void main(String argsargs) ) ArrayListArrayList a=new a=new ArrayListArrayList();(); a.adda.add(new Integer(12);(new Integer(12); a
31、.adda.add(hello);(hello); a.adda.add(23); (23); Iterator p= Iterator p=a.iteratora.iterator();(); while (while (p.hasNextp.hasNext() () System.out.printSystem.out.print( (p.nextp.next();(); 12hello23J a v a 语 言 程 序 设 计 ( 第 2 版 )2 2VectorVector类和类和StackStack类类 import java.util.*; public class TestCap
32、acity public static void main( String args) Vector v = new Vector(20,30); System.out.println(size=+v.size( ); System.out.println(capacity=+v.capacity( ); for (int i=0;i24;i+ ) v.add(i); System.out.println(After added 24 Elements); System.out.println(size=+v.size( ); System.out.println(capacity=+v.ca
33、pacity( ); 【例例14-6】 测试向量的大小及容量变化。测试向量的大小及容量变化。size=0size=0capacity=20capacity=20After added 24.After added 24.size=24size=24capacity=50capacity=50J a v a 语 言 程 序 设 计 ( 第 2 版 ) 除了支持List接口中定义的方法外,向量还有从早期JDK保留下来的一些方法。void addElement(E elem):在向量的尾部添加元素。void insertElementAt(E obj, int index):在指定位置增加元素。E
34、elementAt(int index):获取指定位置的元素。void setElementAt(E obj, int index):设置index处元素为obj。boolean removeElement(E obj):删除首个与obj相同的元素。void removeElementAt(int index):删除index位置的元素。void removeAllElements():清除向量序列所有元素。void clear():清除向量序列所有元素。J a v a 语 言 程 序 设 计 ( 第 2 版 )堆栈(堆栈(StackStack)是一种特殊的数据结构,其特点是后进先)是一种特殊
35、的数据结构,其特点是后进先出。出。堆栈的常用操作是进栈和出栈,堆栈的常用操作是进栈和出栈,push()push()方法可将一个对象压进栈中方法可将一个对象压进栈中pop()pop()方法将弹出栈顶元素作为返回值。方法将弹出栈顶元素作为返回值。peek()peek()方法可获取栈顶元素但不从栈中删除它方法可获取栈顶元素但不从栈中删除它empty()empty()方法可判断栈是否为空。方法可判断栈是否为空。J a v a 语 言 程 序 设 计 ( 第 2 版 )14.3 Collections14.3 Collections类类 它包含有针对它包含有针对Collection(Collection
36、(收集收集) )操作的众多静态方法操作的众多静态方法addAll(Collection c, T. elements)addAll(Collection c, T. elements): 将指定元素添加到指将指定元素添加到指定收集中。定收集中。sort(List list)sort(List list): 根据元素的自然顺序对指定列表按升序进行排序。根据元素的自然顺序对指定列表按升序进行排序。sort(List list, Comparator c)sort(List list, Comparator c): 根据指定比较器产生的根据指定比较器产生的顺序对指定列表进行排序。顺序对指定列表进行排
37、序。max(Collection coll)max(Collection coll):根据元素的自然顺序,返回给定收:根据元素的自然顺序,返回给定收集的最大元素。集的最大元素。min(Collection coll)min(Collection coll): 根据元素的自然顺序返回给定收集根据元素的自然顺序返回给定收集的最小元素。的最小元素。disjoint(Collection c1, Collection c2)disjoint(Collection c1, Collection c2): 如果两个指定收集中没如果两个指定收集中没有相同的元素,则返回有相同的元素,则返回 true true
38、,否则返回,否则返回falsefalsefrequency(Collection c, Object o)frequency(Collection c, Object o):返回指定收集中等于指定对象的:返回指定收集中等于指定对象的元素数。元素数。J a v a 语 言 程 序 设 计 ( 第 2 版 )【例例14-714-7】 列表元素的排序测试列表元素的排序测试import java.util.import java.util.* *; ;public class CollectionsTest public class CollectionsTest public static void
39、 main(String args) public static void main(String args) List mylist = new ArrayList( );List mylist = new ArrayList( );for (char i = a; i g; i+) for (char i = a; i g; i+) mylist.add(String.valueOf(i); mylist.add(String.valueOf(i); Collections.addAll(mylist, S, 12);Collections.addAll(mylist, S, 12);Co
40、llections.sort(mylist);Collections.sort(mylist);System.out.println(mylist);System.out.println(mylist);Collections.sort(mylist, new Comparator1( );Collections.sort(mylist, new Comparator1( );System.out.println(mylist);System.out.println(mylist); 用比较算子排序自然排序J a v a 语 言 程 序 设 计 ( 第 2 版 )class Comparato
41、r1 implements Comparator class Comparator1 implements Comparator public public intint compare(String s1, String s2) compare(String s1, String s2) s1 = s1.toLowerCase( ); /s1 = s1.toLowerCase( ); /字符串全部字符换小写字符串全部字符换小写s2 = s2.toLowerCase( );s2 = s2.toLowerCase( );return pareTo(s2);return pareTo(s2); 【
42、运行结果运行结果】12, S, a, b, c, d, e, f12, S, a, b, c, d, e, f12, a, b, c, d, e, f, S12, a, b, c, d, e, f, SJ a v a 语 言 程 序 设 计 ( 第 2 版 )14.3 Map14.3 Map接口及实现层次接口及实现层次 J a v a 语 言 程 序 设 计 ( 第 2 版 )MapMap中实际上包括了关键字、值以及它们的映射关系的集合,中实际上包括了关键字、值以及它们的映射关系的集合,可分别使用如下方法得到:可分别使用如下方法得到:public Set keySet()public Set
43、keySet():关键字的集合。:关键字的集合。public Collection values()public Collection values():值的集合。:值的集合。public SetMap.Entry entrySet()public SetMap.Entry entrySet():关键字和值:关键字和值的映射关系的集合。的映射关系的集合。J a v a 语 言 程 序 设 计 ( 第 2 版 )MapMap中还定义了对中还定义了对MapMap数据集合的操作方法数据集合的操作方法public void clear(): 清空整个数据集合;public V get(K key):根
44、据关键字得到对应值;public V put(K key,V value):加入新的“关键字-值”;public V remove(Object key):删除Map中关键字所对应的映射关系;public boolean equals(Object obj): 判断Map对象与参数对象是否等价,两个Map相等,当且仅当其entrySet()得到的集合是一致的。public boolean containsKey(Object key):判断在Map中是否存在与关键字匹配的映射关系。public boolean containsValues(Object value):判断在Map中是否存在与键值匹配的映射关系。J a v a 语 言 程 序 设 计 ( 第 2 版 )实现Map接口的类有很多,其中最常用的有HashMap和HashTable,两者使用上的最大差别是HashTable是线程访问安全的。HashTable还有个子类Properties,关键字和值只能是String,经常被用来读取配置信息。J a v a 语 言 程 序 设 计 ( 第 2 版 )例例14-8 Map14-8 Map接口的使用接口的使用import java.util.import java.util
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工业电气自动化控制系统的应用
- 工作坊组织与执行要点
- 工作中的人性化情绪管理与压力缓解方法探讨
- 工作效率优化与创新思维的融合
- 工作效率提升工具及技术应用
- 工作场所中的性别平等意识培养
- 工程中的动态力学校准技术
- 工作安全分析与改善策略
- 工厂安全管理与风险控制
- 工程地质学的研究进展与展望
- 建设工程施工劳务分包合同 GF-2003-0214
- 【MOOC】博弈论基础-浙江大学 中国大学慕课MOOC答案
- 2024年六西格玛绿带认证考试练习题库(含答案)
- 剪映专业版教学课件
- DB51-T 3062-2023 四川省高标准农田建设技术规范
- 2024中华人民共和国文物保护法详细解读课件
- 空调oem合同范本
- 2023-2024年福建高中物理会考试卷(福建会考卷)
- 六下第14课《扩音系统的优化》教案 浙教版(2023)信息科技
- 新疆乌鲁木齐市天山区2023-2024学年六年级下学期期末英语试卷
- 薯蓣皂苷对肿瘤免疫调节的分子靶点探索
评论
0/150
提交评论