《JAVA语言面向对象程序设计 教学课件 ppt 作者 马俊 ppt 11JAVA》由会员分享,可在线阅读,更多相关《JAVA语言面向对象程序设计 教学课件 ppt 作者 马俊 ppt 11JAVA(36页珍藏版)》请在金锄头文库上搜索。
1、数据结构、集合框架,第十一章,目标,了解数据结构的概念 掌握java的集合框架的体系结构 掌握常用的集合类和接口 了解泛型类,简介,按照传统的理解,一个程序应包括以下两个方面: 对数据的描述 在程序中要制定数据的类型和数据的组织方式,我们称为数据结构。 对操作的描述 即操作的步骤,也就是我们说的算法。 数据是操作的对象,操作的目的是对数据进行加工处理,以得到期望的结果。著名的计算机科学家沃斯(Nikiklaus Wirth)提出一个公式: 数据结构+算法=程序 实际上数据结构代表数据在空间上的一种排列方式,而算法代表数据在时间上的动态变化。作为程序员,必须掌握各种基本的数据结构和算法,就跟我们
2、研究自然世界的各种物质组成是一样的道理;我们研究的物质的静态组成以及它的运动规律,我们也研究物质的内部组成,即研究作为某一物质特有的结构和其外部表现之间的联系。,Java对数据结构的支持,集合 将多个元素组成一个单元的对象 用于存储、检索、操纵和传输数据 集合框架 提供用于管理对象集合的接口和类 包括接口、实现和算法,体系结构,用于操纵集合的接口,Collection接口,集合框架的根 通用方法 boolean contains(Object a) boolean equals(Object a) Iterator iterator() int size() void clear() bool
3、ean add(Object a),Set接口,扩展Collection接口 不允许重复元素 对 add()、equals() 和 hashcode() 方法添加了限制 HashSet和TreeSet是Set的实现,SortedSet接口,扩展了Set接口 元素按升序排序 重要异常 ClassCastException NullPointerException,List接口 2-1,具有顺序的集合 扩展了Collection接口 元素可以通过其整型下标访问 可以包含重复元素,List接口 2-2,方法分类 定位方法 get()、set()、add()、remove()、addAll() 搜索方
4、法 indexOf() 和 lastIndexOf() ListIterator方法 listIterator() 和 subList(),Map接口,将键映射至值的对象 每个键最多都只能映射至一个值 重要方法 基本操作 put()、get()、remove()、containsKey()、containsValue()、size() 和 isEmpty() 批操作 putAll() 和 clear() 集合视图 keySet()、values() 和 entrySet(),实现 2-1,用于存储集合的实际数据对象 重要集合类 AbstractCollection类提供Collection接口
5、的框架实现 AbstractList 类提供 List 接口的框架实现 AbstractSequentialList 类是 List 接口的实现 LinkedList 类提供多个方法,用于在列表开始处和结尾 处获得、删除和插入元素,实现 2-2,重要集合类(续) ArrayList 类是 List 接口的可变大小数组实现 AbstractSet 类提供 Set 接口的框架实现 HashSet 类为基本操作提供固定时间性能 TreeSet 类确保排序集将按元素升序,example,import java.util.*; public class ListOper public static vo
6、id main(String args) if(args.length=0) System.out.println(“你必须提供列表元素,作为命令行参数。请重试!“); System.exit(0); System.out.println(); List l=new ArrayList(); for(int i=0;iargs.length;i+) l.add(argsi); Collections.reverse(l); System.out.println(“逆序的列表如下:“); System.out.println(l); Collections.sort(l); System.out
7、.println(“排序的列表如下:“); System.out.println(l); int index=Collections.binarySearch(l,“c“); System.out.println(“元素 “c”的位置为:“+index); Collections.fill(l,“一“);,System.out.println(“用字“一”填充后的列表如下:“); System.out.println(l); List ll=new ArrayList(); ll.add(“第一“); ll.add(“第二“); ll.add(“第三“); Collections.copy(l
8、,ll); System.out.println(“用ll的元素替代后的列表如下:“); System.out.println(l); ,算法 3-1,Collections 类中的静态方法 用于排序、搜索、混排和数据操纵 方法的第一个参数是要执行操作的集合 重要异常 ClassCastException UnsupportedOperationException,算法 3-2,算法 3-3,class AlgorithmExample public static void main(String args) LinkedList link = new LinkedList(); link.a
9、dd(new Integer(10); link.add(new Integer(35); link.add(new Integer(23); link.add(new Integer(54); link.add(new Integer(36); Comparator cmp = Collections.reverseOrder(); Collections.sort(link, cmp); Iterator it = link.iterator(); System.out.println(“逆序排序的列表为: “); while (it.hasNext() System.out.printl
10、n(it.next(); System.out.println(“给定列表中的最大值为:“+Collections.max(link); System.out.println(“给定列表中的最小值为:“+Collections.min(link); ,多简单!,集合框架的优点,提供一组可用的集合接口 提供有效的数据结构和算法 可以方便地扩展或改写集合 接口的实现都是可交换的 使设计新 API 的工作降到最少 接口和算法的可重用性,Vector类,实现可变长度的对象数组 组件可以使用整型下标访问 构造函数 Vector() Vector(Collection c) Vector(int cap)
11、 Vector(int cap,int inc),Enumeration接口: 此接口定义了多个方法,有助于枚举对象集合中的元素。 Boolean hasMoreElements() Object nextElement(),Enumeration e=v.elements(); While(e.hasMoreElements() System.out.println(e.nextElement(); ,Stack类,表示后进先出的对象堆栈 一个构造函数,创建空堆栈 Stack(),import java.util.*; class StackEg public static void mai
12、n(String args) Stack s=new Stack(); s.push(“一“); s.push(“二“); s.push(“三“); s.push(“四“); System.out.println(“存储在堆栈中的元素为:“); System.out.println(s); System.out.println(“=“); while(!s.empty() System.out.println(s.pop(); ,Hashtable类,以键值对的形式存储数据 键被散列,散列码用作存储值的下标 构造函数 Hashtable( ) Hashtable(int cap) Hashta
13、ble(int cap, float load) Hashtable(Map m),import java.util.*; class HashTableExample public static void main(String args) Hashtable h = new Hashtable(); Enumeration e; String str; double bal; h.put(“Maria“, new Double(4545.50); h.put(“Joseph“, new Double(2000.00); h.put(“Johnson“, new Double(5000.00
14、); e = h.keys(); while (e.hasMoreElements() str = (String) e.nextElement(); System.out.println(str + “: “ + h.get(str); System.out.println(); bal = ( (Double) h.get(“Maria“).doubleValue(); h.put(“Maria“, new Double(bal + 1000); System.out.println(“Marias new balance: “ + h.get(“Maria“); ,Properties类
15、,Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。 一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。 参考javadoc,位集(BitSet),位集是由“二进制位”构成的一个Vector。 适用场合:高效率保存大量“开关”信息。 优点:节省空间 缺点: 速度比固有类型的数组慢 最小长度64位,如果存8位数据,用BitSet显得浪费。,枚举器(Enumeration),要求集合的elements()方法要求集合提供一个Enumeration。
16、 nextElement(),首次调用返回第一个对象,再次调用返回 下一个对象。 hasMoreElements(),检查序列中是否还有更多的对象。,public class Cat private int catNumber; Cat(int i) catNumber = i; void print() System.out.println(“Cat #“ + catNumber); ,public class Dog private int dogNumber; Dog(int i) dogNumber = i; void print() System.out.println(“Dog #“ + dogNumber); ,枚举器演示,import java.util.*; public class CatsAndDogs p