资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,面向对象的程序设计,对外经济贸易大学 雷擎,面向对象的程序设计,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,6,章,数组和集合类,对外经济贸易大学信息学院,content,6.1,数组,6.2,集合框架,6.3,枚举类型,实验:数组,6.1 数组,6.1.1 数组的声明,6.1.2 数组的创立,6.1.3 数组元素的初始化,6.1.4 数组的引用,6.1.5 二维数组,6.1.6 数组的排序,数组的概念,数组由同一类型的一连串对象或根本数据组成,封装在同一个标识符数组名称下。,数组是对象,动态初始化,可以赋值给Object类型的变量,在数组中可以调用类Object 的所有方法,数组中的变量被称作数组的元素,元素没有名字,通过数组名字和非负整数下标值引用数组元素。,每个数组都有一个由 public final 修饰的成员变量:length ,即数组含有元素的个数length可以是正数或零,数组元素,6.1.1 数组的声明,声明Declaration,Type arrayName; 或者,Type arrayName ;,声明数组时无需指明数组元素的个数,也不为数组元素分配内存空间,不能直接使用,必须经过初始化分配内存后才能使用,数组声明的例子,例如:,int myIntArray;,String myStringArray;,Circle myCircleArray;,6.1.2 数组的创立,arrayName=new Typecomponets number;,用关键字new构成数组的创立表达式,可以指定数组的类型和数组元素的个数。元素个数可以是常量也可以是变量,根本类型数组的每个元素都是一个根本类型的变量;引用类型数组的每个元素都是对象的的引用,数组创立的例子,例如:,int ai; aI=new int10;,String aS; aS=new String3;,Circle aC;aC=new Circle5,或者可以将数组的声明和创立一并执行,int ai=new int10;,可以在一条声明语句中创立多个数组,String s1=new String3, s2=new String8;,6.1.3 数组元素的初始化,数组元素的类型与声明的数组数据类型保持一致,每一个数组元素都相当于一个变量,进行需要对象初始化。,根本类型的数组,可以在声明数组名时,给出了数组的初始值。程序便会利用数组初始值创立数组并对它的各个元素进行初始化 。例如:inta=22, 33, 44, 55;,6.1.3 数组元素的初始化,创立数组的时,如果没有指定初始值,数组便被赋予默认值初始值。,根本类型数值数据,默认的初始值为0;,boolean类型数据,默认值为false;,引用类型元素的默认值为null。,程序也可以在数组被构造之后改变数组元素值,数组元素初始化的例子,int aI; aI=new int10;,String aS; aS=new String3;,Circle aC; aC=new Circle5;,int k =0 ;,for(k=0;k10;k+) ,aIk = k*k;,aS0 = aaa;,aS1 = new String(bbb);,aS3 = new String(ccc);,for(k=0;k5;k+) ,aCk = new Circle();,6.1.4 数组的引用,arrayName index ,数组下标限制,下标从零开始计数,最大值为 length 1,如果超过最大值,将会产生数组越界异常ArrayIndexOutOfBoundsException,必须是 int , short, byte, 或者 char.,元素的个数即为数组的长度,可以通过 arrayName.length引用,public class MyArray ,public static void main(String args),int myArray; /声明数组,myArray=new int10; /创立数组,System.out.println(IndexttValue);,for(int i=0; imyArray.length;i+),System.out.println(i+tt+myArrayi);,/证明数组元素默认初始化为0,/myArray10=100; /将产生数组越界异常,数组引用例子,数组变量名是一个引用,public class AA ,public static void main(String args) ,int a1 = 1, 2, 3, 4, 5 ;,int a2;,a2 = a1;,for(int i = 0; i a2.length; i+) a2i+;,for(int i = 0; i a1.length; i+),System.,out,.println( a1 + i + = + a1i);,运行结果:,a10 = 2,a11 = 3,a12 = 4,a13 = 5,a14 = 6,6.1.5 二维数组,二维数组的声明,Type arrayName; 或者,Type arrayName ;,二维数组的创立,arrayName = new Typelength1length2,二维数组例子,int a1 ;,myArray,可以存储一个指向,2,维整数数组的引用。其初始值为,null,。,int a2=new int35 ;,建立一个数组对象,把引用存储到,myArray,。这个数组所有元素的初始值为零。,int a3=8,1,2,2,9, 1,9,4, 3, 7;,建立一个数组并为每一个元素赋值。,二维数组的长度,public class AA ,public static void main(String args) ,int a3 = 1,2,3,3,4,5,6,7,8;,System.,out,.println( a3.length);,System.,out,.println( a30.length);,System.,out,.println( a31.length);,System.,out,.println( a32.length);,运行结果,3,3,2,4,二维数组的实现过程,int myArray;,myArray = new int3 ;,myArray0 = new int3;,int x = 0, 2;,int y = 0, 1, 2, 3, 4 ;,myArray1 = x ;,myArray2 = y ;,6.1.6 数组的排序,在,java,的API里面实现了数组排序功能。在类有静态方法,sort,就是实现这个功能。,public class Test6_5 ,public static void main(String args) ,Student ss = new Student new Student(1, iven),new Student(2, tom), new Student(3, rose),new Student(3, jone) ;,Arrays.,sort,(ss);,for (int i = 0; i ss.length; i+) ,System.,out,.println(ssi);,6.2 集合框架,6.2.1,集合框架接口,6.2.2 Collection,接口,6.2.3 List,接口,6.2.4 Set,接口,6.2.5 Map,接口,6.2.6 Collection,和,Arrays,6.2.7,泛型,集合框架,Java语言的设计者对常用的数据结构和算法做了一些标准接口和实现具体实现接口的类。所有抽象出来的数据结构和算法统称为Java集合框架Java Collection Framework,6.2.1 集合框架接口,Java语言的设计者对常用的数据结构和算法做了一些标准接口和实现具体实现接口的类。所有抽象出来的数据结构和算法统称为Java集合框架Java Collection Framework,6.2.1 集合框架接口,Java2,中的集合框架提供了一套设计优良的接口和类,使程序员操作成批的数据或对象元素极为方便。,这些接口和类有很多对抽象数据类型操作的,API,,而这是我们常用的且在数据结构中熟知的。例如,Maps,,,Sets,,,Lists,,,Arrays,等。,几种标准的集合接口简化结构,6.2.2 Collection接口,Collection是最根本的集合接口,一个Collection代表一组Object,即Collection的元素Elements。,所有实现Collection接口的类都必须提供两个标准的构造函数:无参数的构造函数用于创立一个空的Collection,有一个 Collection参数的构造函数用于创立一个新的Collection,这个新的Collection与传入的Collection有相同的元素。,迭代子,不管Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素,Iterator it = collection.iterator(); / 获得一个迭代子,while(it.hasNext() ,Object obj = it.next(); /得到下一个元素,6.2.3 List接口,List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。,用户能够使用索引元素在List中的位置来访问List中的元素。,List允许有相同的元素。,除了具有Collection接口必备的iterator()方法外,List还提供一个 listIterator()方法,返回一个ListIterator接口,和标准的Iterator接口相比,ListIterator多了一些 add()之类的方法,允许添加,删除,设定元素,还能向前或向后遍历。,实现List 接口的常用类有LinkedList、ArrayList、Vector 和Stack。,6.2.4 Set接口,Set是一种不包含重复的元素的Collection,Set接口的常用具体实现有HashSet和 TreeSet类,6.2.5 Map接口,Map,接口不是,Collection,接口的继承。,Map,接口用于维护键和值。该接口描述了从不重复的键到值的映射。,一个,Map,中不能包含相同的键,每个键只能映射一个值。,Map接口其特点是元素是成对出现的,以键和值的形式表达出来,键要保证唯一性:常用类有:HashMap、Hashtable、TreeMap。,6.2.6 Collections和Arrays,两个类提供了封装器实现、数据结构算法和数组相关的应用。,Collections 类中定义了多种集合操作方法,实现了对集合操作方法,实现了对集合元素的排序、取极值、 批量拷贝、集合结构转换、循环移位以及匹配性检查等功能,Arrays类是对数组进行操作的工具类。可以用一个数组生成一个对应的ListasList,可以对数组元素进行排序sort、查找binarySearch、比较 equals、填充fill,等等。,6.2.7 泛型,泛型的本质就是将所操作的数据类型参数化,也就是说,该数据类型被指定为一个参数。,在Java中泛型主要是用来构建平安的集合,6.3 枚举类型,举类型是一个常量集合的数据类型。因为都是常量,所以一个枚举类型中的字段名都要大写。在JAVA中,枚举类型的定义是通过“enum关键字进行的。,小结,6.1,数组,6.2,集合框架,6.3,枚举类型,实验:数组,实验,10,:数组,BACK,知识点提示:,理解,数组是同类型对象的集合,数组的元素是对象,数组均需要声明、初始化后才能使用,掌握,数组的定义、初始化和使用,End of Chapter 6,
展开阅读全文