资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,#,操作系统,课程名,:,Web,程序设计,课程号,:,020213005,课程网址:,,授课教师:马志强,教师邮箱,:,mzq_bim,2011-2012,学年第二学期,内蒙古工业大学,校级精品建设课程,Web,程序设计课程,组 制作,第四章,数组与容器,1,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,目 录,4.1,数组的声明与实例化,4.2 Arrays,的使用功能,4.3 Java,容器框架,4.4 ArrayList,、,List,的应用,4.5 Stack,、,Queue,的应用,4.6 Hashtable,和,HashMap,的应用,2,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.1,数组的声明与实例化,一、数组的概念,一组相同类型数据的有序集合,是一种数据结构,数组中数据成为元素。,分为:基本类型数组和类类型数组。,在,Java,提供的存储及随机访问对象序列的各种方法中,数组是效率最高的一种。,使用步骤:声明、创建、初始化和应用,3,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.1,数组的声明与实例化,二、数组,的声明,1,、数组的,声明,说明:声明数组时不能指明数组元素的个数;声明一个数组并没有创建一个对象,此时并不能使用数组。,类型,变量名,/,对象名;,类型,变量名,/,对象名,;,例如:,int i,或,int i,Student ss,或,Student ss,4,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.1,数组的声明与实例化,2,、创建,数组,对象名,/,变量名,=,new,类型,长度,;,说明:,1,)创建数组使用,关键字,new,,创建时须指定类型和数组元素个数;,2,)创建,基本数据类型数组:,int i=new int2,;,3,)创建,引用数据类型数组:,Student ss=new Student100,或,ss=new Student,的子类,100,;,5,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.1,数组的声明与实例化,3,、数组,的初始化,1,),int,i=new int2,3,;,Student,ss=new Studentnew Student(1,”,zhangsan,”,),new Student(2,”,lisi,”,),;,2,),int,i=2,3,;,Student ss=new Student(1,”,zhangsan,”,),new Student(2,”,lisi,”,),;,6,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.1,数组的声明与实例化,3,)对象数组的,动态初始化,例如:,Student,jsj=new,StudentN;,for(int j=0;j jsj.length;j,+),jsjj,=new,Student(j+1,”,王涛”,);,7,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.1,数组的声明与实例化,三、多维数,组,声明,、创建与初始化,int arr=new int35;,int arr2=1,2,3,4,5,6,7,8;,int arr3=new int1,2,3,4,5,6,7,8,;,int arr4=new int4;,arr40=4,5;,arr41=1,;,说明:多维数组创建必须从高维度开始创建。,8,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.1,数组的声明与实例化,四、数组的相关,操作,1,、遍历一维数组,int arr=6,3,2,8,9;,for(int i=0;iarr.length;i+),System.out.println(arri);,9,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.1,数组的声明与实例化,2,、多维数组的遍历,for(int i=0;iarr.length;i+),for(int j=0;jarri.length;j+),System.out.println(arrij);,10,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.1,数组的声明与实例化,3,、数组的拷贝(,System,类中,arraycopy,方法),System.arraycopy(Object src,int srcPos,Object dest,int destPos,int length),src,:源数组,srcPos,:源数组开始拷贝的起始位置,dest,:目标数组,destPos,:目标数组的起始位置,length,:拷贝的元素个数,11,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.2 Arrays,的使用功能,一、类,Arrays,java.util.Arrays,public class,Arrays,extends,Object,此类包含用来操作数组(如排序和搜索)的各种方法。,12,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.2 Arrays,的使用功能,二、,Arrays,的排序,实现排序的条件是:数组元素所属类型必须实现,Comparable,接口或者,Comparator,接口;,Arrays.,sort,(,数组名,);,13,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.2 Arrays,的使用功能,三、,Arrays,的二分查找,Arrays.binarySearch(,数组名,值,),从查找与指定值相同的数组元素,返回其索引位置。,14,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.3 Java,容器框架,集合,三要素,:接口,实现接口的类,和,算法。,容器也称为集合,是指一个可以容纳多个对象的对象,容器主要用来管理和维护一系列相似的对象;数组也是一种容器。,一、容器,15,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.3 Java,容器框架,框架就是一个类库的集合。集合框架就是一个用来表示和操作集合的统一的架构,(,体系结构,),,包含了实现集合的接口与类。,二、,Java,集合框架,(Java Collections Framework),16,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.3 Java,容器框架,三、,Collection,接口的类层次,Collection,AbstractCollection,Vector,ArrayList,Stack,List,Set,SortedSet,AbstractSet,AbstractList,AbstractSequentialList,HashSet,TreeSet,LinkedList,包括,4,个接口、,4,个抽象类及,6,个具体类,17,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.3 Java,容器框架,说明:,1,),Collection,:集合层次中的根接口,,JDK,没有提供这个接口直接的实现类;,2,),Set,:不能包含重复的元素。,3,),SortedSet,:是一个按照升序排列元素的,Set,;,18,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.4 List,、,ArrayList,的应用,一、,List,(,java.util.List,接口),是一个有序的集合,可以包含重复的元素。用户可以对列表中每个元素的插入位置进行精确地控制。用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。,19,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.4 ArrayList,、,List,的应用,二、,ArrayList,(,1,),ArrayList,:底层采用数组实现,可以,将其看作是能够自动增长容量的数组;,(,2,)利用,ArrayList,的,toArray(),返回一个数组;,(,3,),Arrays.asList,(,数组名,),返回一个列表;,(,4,)迭代,器,(Iterator),给我们提供了一种通用的方式来访问集合中的元素。,20,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.5 Stack,、,Queue,的应用,一、,Stack,类,Stack,类表示后进先出(,LIFO,)的对象堆栈。它通过五个操作对类,Vector,进行了扩展,允许将向量视为堆栈。它提供了通常的,push,和,pop,操作,以及取堆栈顶点的,peek,方法、测试堆栈是否为空的,empty,方法、在堆栈中查找项并确定到堆栈顶距离的,search,方法。,21,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.5 Stack,、,Queue,的应用,二、,Q,ueue,接口,队列通常(但并非一定)以 FIFO(先进先出)的方式排序各个元素。无论使用哪种排序方式,队列的,头,都是调用,remove(),或,poll(),进行出对,的。在 FIFO 队列中,所有的新元素都插入队列的,末尾,。其他种类的队列可能使用不同的元素放置规则。每个,Queue,实现必须指定其顺序属性。,22,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.5 Stack,、,Queue,的应用,三、具体的,Queue,类,1,、,类,ArrayBlockingQueue,一个由数组支持的有界阻塞队列。此队列按,FIFO,(先进先出)原则对元素进行排序。队列的,头部,是在队列中存在时间最长的元素。队列的,尾部,是在队列中存在时间最短的元素。新元素插入到队列的尾部,队列获取操作则是从队列头部开始获得元素。支持线程操作。,23,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.5 Stack,、,Queue,的应用,2,、,PriorityBlockingQueue,一个无界,阻塞队列,,它使用与类,PriorityQueue,相同的顺序规则,并且提供了阻塞获取操作。虽然此队列逻辑上是无界的,但是资源被耗尽时试图执行,add,操作也将失败(导致,OutOfMemoryError,)。此类不允许使用,null,元素。依赖自然顺序的优先级队列也不允许插入不可比较的对象(这样做会导致抛出,ClassCastException,)。,24,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.6 Hashtable,和,HashMap,的应用,一、,Hashtable,类,实现一个哈希表,该哈希表将键映射到相应的值。任何非,null,对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现,hashCode,方法和,equals,方法。,25,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.6 Hashtable,和,HashMap,的应用,响其性能的参数:,初始容量,和,加载因子,(,1,),容量,是哈希表中,桶,的数量,,初始容量,就是哈希表创建时的容量。,(,2,),加载因子,是对哈希表在其容量自动增加之前可以达到多满的一个尺度。,26,Web,程序设计(,Web Programming,),授课,:马志,强,(E-mail:mzq_bim),内蒙古工业大学,校级精品建设课程,4.6 Hashtable,和,HashMap,的应用,二,、,HashMap,类,基于哈希表的,Map,接口的实现。此实现提供所有可选的映射操作,并允许使用,null,值和,null,键。(除了非同步和允许使用,null,之外,,HashMap,类与,Hashtable,大致相同。),27,
展开阅读全文