Java集合架构幻灯片_第1页
Java集合架构幻灯片_第2页
Java集合架构幻灯片_第3页
Java集合架构幻灯片_第4页
Java集合架构幻灯片_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

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

文档简介

1、J,1,Chapter14 Java集合架构,Collection接口和AbstractCollection类 规则集Set 比较器接口Comparator 线性表List Map,J,2,简介,几种常见的数据结构: 链表、堆栈、队列、堆、优先队列等。 集合(collection):存储一组对象的容器对象。 Java集合架构支持三种类型的集合: 规则集(set)、线性表(list)、图(map) Set:存储一组互不相同的元素。 List:存储一组顺序排列的元素。 Map:存储一组均有一个关联键的对象。 注意:java集合架构中的类都实现了Cloneable和Serializable接口。 本

2、章所学的类位于:java.util包中。 重点:如何使用集合架构中的接口和类。,J,3,主要接口和类的关系图,J,4,主要接口和类的关系图,J,5,Collection接口和AbstrctCollection接口,J,6,散列集 (HashSet类),三个: 散列集(HashSet类)、 链式散列集 (LinkedHashSet类)、 树形集(TreeSet类)。 散列集(HashSet类): 添加到散列集中的对象必须实现hashCode()方法。 实例: 创建一个散列集来存储文本中解析出来的单词,并使用迭代器遍历该集合中的每一个单词。 注意:1.将多个相同元素添加到规则集中,只有一个被存储。

3、 2.集合中的元素没有按插入时的顺序存储(集合的无序性)。 3.添加到集合中的元素必须和集合声明的元素类型相同。 4.for(Object element:set)语句,用于遍历集合中的每个元素。,J,7,LinkedHashSet: 使用链表实现,可以按照元素插入的顺序进行访问。 实例: 用文本文件中提取的字符串构造链式散列集,并用foreach语句对其中的元素进行访问。 程序:ex16_2.java 提示:如果不需要使元素按照其插入的顺序进行存储,应该使用HashSet,它的效率比LinkedHashSet高。 TreeSet: 可以对加入其中的元素进行排序(升序或降序) 几个方法: fi

4、rst()、last() 、headSet(toElement) 、tailSet(fromElement) 注意:加入树形集中的元素必须是可比较的。,链式散列集 (LinkedHashSet)和树形集(TreeSet),J,8,实现对象比较的方法: 方法1:实现Comparable接口。 实例:使用TreeSet类按照字母顺序显示单词。 程序:ex16_3.java 使用TreeSet(Collection c)可以提高效率,仅排序一次。 注意:更新集合,需保持顺序时,使用树形集,否则使用散列集。 方法2:实现Comparator 接口。 可以将实现了Comparator 接口的不同类型的元

5、素加入到树形集中。 实现两个方法: public int compare(Object element1,Object element2) public boolean equals(Object element) 实例:几何图形面积的比较。并将不同的几何图形加入到树形集中。然后输出加入的元素。 程序:ex16_4.java 注意:Comparable用于比较相同类型的两个对象,Comparator可比较不同类型的两个对象。,链式散列集 (LinkedHashSet)和树形集(TreeSet),J,9,线性表,使用线性表: 1.允许在一个集合中存储重复的元素。 2. 可以指定元素的存储位置。

6、3.可以用下标来访问元素。 4.但不支持有序存储。,J,10,线性表,J,11,ArrayList和LinkedList的区别: 1.实现方式不同 数组线性表用数组实现的线性表,链式线性表是用链表结构实现的线性表。 2.不同应用场合效率不同 数组线性表可以用下标随机访问元素,但不适合在任意的位置频繁插入和删除元素。 ArrayList 创建动态可变的数组。 trimToSize():用于调整数组大小到线性表实际的大小。 LinkedList 包含了从线性表两端提取、插入和删除元素的方法。 getFirst(), getLast() , addFirst(o:E) , addLast(o:E),

7、 removeFirst(), removeLast(),ArrayList和LinkedList,J,12,实例: 创建用数组填充的数组线性表,并将新元素插入到线性表指定的位置,且利用该数组线性表创建一个链表,并从该链表中插入和删除元素。最后分别用向前和向后遍历的方法遍历该链表。 程序:ex16_5.java 列表的创建: 使用java.util.Arrays类中的asList(T. a)方法。 如:List list=Arrays.asList(“red”,”green”,” blue”);,ArrayList和LinkedList,J,13,线性表不支持有序存储,但是: java.uti

8、l.Collections类提供了: 1. 用于线性表排序的静态方法。 2. 用于求集合的最大、最小元素等的方法。 例1: List list=Arrays.asList(2,3,4,7,11,45,50,59,60); Collections.binarySearch(list,11); Collections.binarySearch(list,5); 例2: Set set=new HashSet(); set.add(“red”); set.add(“blue”); Collections.max(set);,线性表(List)和集合(Collection)的静态方法,J,14,Sta

9、ck类: peek() 返回栈顶元素 pop() 弹出栈顶元素 push(o:E) 在栈顶添加一个新元素 Queue接口:LinkedList offer(element:E) 向队列中插入一个元素 poll() 返回并删除队列头,队列为空,则返回null remove() 返回并删除队列头,队列为空,抛出异常 peek() 返回但不删除队列头,如果队列为空,返回null. 实例:分别创建一个栈和一个队列,插入和删除元素并显示。 程序:ex16_6.java,栈类(Stack)、队列(Queue),J,15,是Queue接口的实例。使用Comparable对元素排序,拥有最小数值的元素被赋予最

10、高的优先级,最先从队列中移出。也可以使用实现了比较器接口的实例对元素进行比较。 优先队列创建的构造方法: PriorityQueue() PriorityQueue(initialCapacity:int) PriorityQueue(c:Collection) PriorityQueue(initialCapacity:int,comparator:Comparator) 实例:创建一个优先队列,并以正序和倒序的方式输出。 程序:ex16_7.java,优先队列(PriorityQueue),J,16,图(map),Map接口:Map 建立元素和键的映射关系。 键:可以是任意类型的对象,一个图中不能有重复的键,每个键对应一个值。,J,17,实现Map接口的具体类,1.散列图HashMap 元素是没有顺序的 2.链式散列图 LinkedHashMap 按元素插入的顺序排序或最后访问的时间顺序排序 3.树形图 TreeMap 按照键的顺序排序 实例:创建一个散列图,一个链式散列图和一个树形图,建立学生与年龄之间的映射关系。按照递增的顺序显示树形图中的映射。 程序:ex

温馨提示

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

评论

0/150

提交评论