Java语言程序设计第七章.ppt_第1页
Java语言程序设计第七章.ppt_第2页
Java语言程序设计第七章.ppt_第3页
Java语言程序设计第七章.ppt_第4页
Java语言程序设计第七章.ppt_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Java面向对象程序设计 第7章 对象的管理 本章主要内容 l对象数组 lArrays类的使用 ljava.util包 List集合 Set集合 Map集合 lJava新特性泛型 对象数组 l数组是一种效率较高的存储和随机访问对象引用序列 的方式。 l数组标识符其实只是一个引用,指向在堆中创建的一 个个真实的对象 。 l数组元素可以是基本数据类型,也可以是引用类型。 对象数组和基本类型数组在使用上几乎是一样的。唯 一的区别就是对象数组保存的是引用,基本类型数组 直接保存基本类型的值。 arr= data1 0x1001 null0x1001 data2 栈内存 堆内存 指向其 它数据 演示对象数组 Arrays类 lArrays类属于java.util包,它有一套static方法,提供 操作数组的实用功能,可以对数组进行查找和排序。 l对于插入操作,Arrays没有特殊算法,一般对数组的 插入都是转化为Collection之后再进行插入。 名称说明 sort( ) 对指定的数组排序。 binarySearch( ) 对已排序的数组进行二元搜索,如果找到指定的值就 返回该值所在的索引,否则就返回负值。 fill( ) 将数组中的所有元素设定为指定值。 equals( ) 比较两个数组中的元素值是否全部相等,如果是将返 回true,否则返回false。 Arrays类 l演示使用Arrays类进行数组的排序与搜索。 演示对象数组的排序 Scanner scanner = new Scanner(System.in); int arr = 7, 5, 3, 12, 9, 17, 14 ,15 ,16 ,13; System.out.print(“排序前: “); for(int i = 0; i -1) System.out.println(“找到值于索引“ + find + “位置“); else System.out.println(“找不到指定值“); Arrays类 l演示使用Arrays类来进行数组的填充与比较。 int arr1 = new int10; int arr2 = new int10; int arr3 = new int10; Arrays.fill(arr1, 5); /填充数组的值 Arrays.fill(arr2, 5); Arrays.fill(arr3, 10); System.out.print (“arr1: “); for(int i = 0; i arr1.length; i+) System.out.print(arr1i + “ “); System.out.println( ); System.out.println(“arr1 = arr2 ? “ + Arrays.equals(arr1, arr2); System.out.println(“arr1 = arr3 ? “ + Arrays.equals(arr1, arr3); 对象数组问题 l对象数组的元素个素是固定的,不适用于增加 和删除操作。 增加元素的数量是未知的; 删除元素后,移动元素位置效率很低。 l当对象数组内尚有元素为null时,使用Arrays 类对其进行sort排序,会报空指针异常。 l根本原因为对象数组的元素个数不可变。 两个集合框架 lCollection集合框架 Collection是最基本的集合接口,一个Collection代 表一组Object,即Collection的元素。 lMap集合框架 Map提供key到value的映射。 Map中的元素是键值 成对的对象。一个Map中不能包含相同的key,每 个key只能映射一个value。 集合框架 List集合 lList是有序的Collection;使用索引(类似于数 组下标)来访问List中的元素;List允许有相同 的元素。实现List接口的常用类有LinkedList 、ArrayList、Vector和Stack。 lList接口常用方法有: list.add( ):添加数据。 list.remove( ):删除数据。 list.removeAll( ):删除所有数据。 list.retainAll( ):保留交集。 list.subList(size1, size2):返回size1到size2之间的数 据。 ArrayList lArrayList 对象是长度可变的对象引用数组,类 似于动态动态 数组组。随着元素的添加,元素的数 目会增加,列表也会随着扩扩展。访问访问 和遍历历 对对象时时,它提供更好的性能。 l常用方法有: boolean add(Object obj):将指定的元素追加到列表的尾部。 Object get(int index):返回列表中指定位置的元素。 int size( ):返回列表中的元素数。 int indexOf(Object obj):搜索给定对象第一次出现的位置。 int lastIndexOf(Object obj):返回指定对象在列表中最后一次 出现的位置。 boolean remove(int index):移除列表中指定位置上的元素。 演示ArrayList LinkedList lLinkedList提供额外的addLast、addFirst、 removeFirst、removeLast等方法。这些操作 使LinkedList可被用作堆栈(stack)、队列( queue)或双向队列(deque)。 演示LinkedList new Student(“003”); new Student(“002”); new Student(“001”); 001002003 进栈出栈 入队 出队 Iterator迭代器 l所有Collection类型的实现类都支持一个 iterator( )的方法,该方法返回一个迭代器, 使用该迭代器即可逐一遍历访问Collection中 每一个元素。用法如下: Iterator it = collection.iterator( ); /获得一个迭代器 while(it.hasNext( ) Object obj = it.next( ); /得到下一个元素 演示Iterator Set集合 lSet是一种不包含重复的元素的Collection,即 任意的两个元素e1和e2都有e1.equals(e2) = false,Set最多有一个null元素。 lSet接口不保证维护元素的顺序。 l实现Set接口的常用类有HashSet和TreeSet。 HashSet lHashSet集合里面存放的对象是没有特定次序的。 l元素不能重复,例如: Set set=new HashSet( ); String s1=new String(“hello“); String s2=new String(“hello“); set.add(s1); set.add(s2); l虽然变量s1和s2实际上引用的是两个内存地址不同的 字符串对象,但是由于s2.equals(s1)的比较结果为true ,因此Set认为它们是相等的对象,当第二次调用add 方法时,add方法不会把s2引用的字符串对象加入到集 合中。 TreeSet lTreeSet是保持特定次序的Set,具有排序功能。 Set set = new TreeSet ( ); set.add(“justin“); set.add(“car“); set.add(“minor“); set.add(“justin“); Iterator iterator = set.iterator( ); while(iterator.hasNext( ) System.out.print(iterator.next( ) + “ “); l程序运行结果:car justin minor l由于集合中是String类型元素,输出结果依据Unicode 编码自动排序。 Map集合 lMap提供key到value的映射,每个key映射一 个value 。 l一个Map中不能包含相同的key,但对应的 value对象可以重复。 lMap中的元素是键值成对的对象,像个小型数 据库,最典型的应用就是数据字典。 lMap有两种比较常用的实现:HashMap和 TreeMap。 HashMap l在各种Map中,HashMap用于快速查找。集合中的每一个 元素对象包含一对键和值,集合中没有重复的键,但值对 象可以重复。例如如下程序语句: Map map=new HashMap( ); map.put(“1“, “Mon“); map.put(“1“, “Monday“); map.put(“2“, “Monday“); l由于第一次和第二次加入到Map中的键都是1,所以第一次 加入的值将被覆盖,而第二个和第三个的值虽然相同,但 是键不一样,所以分配不同的地址空间,不会发生覆盖, 也就是说一共有两个元素在map这个Map类型集合中。 l因为Map的键不可能重复,所以可以用Set数据结构来存储 ;而Map的值有可能重复,所以要用Collection来存储。 演示HashMap TreeMap lTreeMap和TreeSet一样,能对键进行自动排 序。 Map map = new TreeMap( ); map.put(“1“, “Monday“); map.put(“3“, “Wendsday“); map.put(“4“,“ Thursday“); map.put(“2“,“ Tuesday“); Set keys = map.keySet( ); Iterator it = keys.iterator( ); while(it.hasNext( ) String key = (String)it.next( ); String value = (String)map.get(key); System.out.println(key + “ “ + value); 程序运行结果: 1 Monday 2 Wendsday 3 Thursday 4 Tuesday 演示TreeMap 泛型 l泛型是Java SE 1.5的新特性,泛型的本质是参数化类 型,也就是说所操作的数据类型被指定为一个参数。 l在Java SE 1.5之前,没有泛型的情况的下,通过对类 型Object的引用来实现参数的“任意化”,“任意化”带 来的缺点是要做显式的强制类型转换,而这种转换是 要求开发者对实际参数类型可以预知的情况下进行的 。对于强制类型转换错误的情况,编译器可能不提示 错误,在运行的时候才出现异常,这是一个安全隐患 。 l泛型的好处是在编译的时候检查类型安全,并且所有 的强制转换都是自动和隐式的,提高代码的重用率。 演示泛型 Collections类 lCollections是针对集合类的一个帮助类。提供 了一系列

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论