资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,6,章 数组、字符串及容器类,数组类型属于复合数据类型,它是由类型相同的元素组成的有序的数据集合。因此数组最主要的特点是:(,1,)元素类型相同;(,2,)元素有序;(,3,)所有元素公用一个名称。,另外,根据组织数组的结构不同,数组可以分为一维数组、二维数组、,,依此类推。,第6章 数组、字符串及容器类 数组类型属于复,第,6,章 数组、字符串及容器类,6.1,一维数组,6.2,多维数组,6.3,字符串处理,6.4,数组与容器的比较,6.5,容器,6.6,迭代器,6.7,容器的分类法,6.8,总结,6.9,习题,第6章 数组、字符串及容器类6.1一维数组,6.1,一维数组,6.1.1,一维数组的,声明,6.1.2,一维数组的,初始化,6.1.3,一维数组的,引用,6.1一维数组 6.1.1一维数组的声明,6.1.1,一维数组的声明,数组声明的语法格式有以下两种:,arraytype array-name;,或,arraytype array-name;,例如:,int month_days;,或,int month_days;,6.1.1一维数组的声明数组声明的语法格式有以下两种:,6.1.2,一维数组的初始化,静态初始化,是在定义数组的同时对数组元素进行初始化:,String strName=,“,I,”,”,like,”,”,Java!,”,;,String strName=,“,I,”,”,like,”,”,Java!,”,;,数组的,动态初始化,:,数组名,=new,数组元素类型,长度,;即:,array-name=new typearraySize;,P124,6.1.2一维数组的初始化 静态初始化是在定义数组的同时对数,6.1.3,一维数组的引用,所谓数组元素的引用,指的是如何在程序中引用初始化后的数组元素,引用的方式为,arrayNameindex,,其中,index,为数组的下标,可以是整型常数、变量和表达式,范围是从,0,开始,一直到数组的长度减一。,例如:,int a=1,2,3,4,5;,a0=1;a1=2;a2=3;a3=4;a4=5;,p125,6.1.3一维数组的引用 所谓数组元素的引用,指的是如何在程,6.2,多维数组,6.2.1,二维数组的声明,6.2.2,二维数组的初始化,6.2.3,二维数组的引用,6.2多维数组6.2.1二维数组的声明,6.2.1,二维数组的声明,二维数组和一维数组一样,也必须先声明再创建,声明和创建也可以合在一条语句中完成。二维数组声明的格式为:,数组元素类型 数组名,;,或,数组元素类型,数组名;,6.2.1二维数组的声明 二维数组和一维数组一样,也必须先声,6.2.2,二维数组的初始化,二维数组的初始化也分为静态初始化和动态初始化两种。所谓静态初始化,就是在定义二维数组的同时为数组分配了空间,如下:,int int_array=1,1,1,2,2,2,3,3,3;,对于二维数组的动态初始化,可以有两种方法:,(,1,)直接为每一维分配空间,格式如下:,arrayName=new typearrayLen1 arrayLen2;,(,2,)从最高维开始,分别为每一维分配空间,格式如下:,arrayName=new type arrayLen1;,6.2.2二维数组的初始化二维数组的初始化也分为静态初始化和,6.2.3,二维数组的引用,对二维数组中元素的引用格式如下:,arrayNameindex1index2;,其中,arrayName,代表二维数组的名称,,index1,和,index2,是下标,与一维数组一样,这两个下标可以是常数、变量和表达式,如,int_array 12,、,int_array a1,、,int_array a*20,,而且每一维的下标都是从,0,开始,一直到该维长度减一。,p129,页,6.2.3二维数组的引用 对二维数组中元素的引用格式如下:,6.3,字符串处理,6.3.1,生成字符串,6.3.2,访问字符串,6.3.3,修改字符串,6.3.4,其他操作,6.3字符串处理 6.3.1生成字符串,6.3.1,生成字符串,1.,构造,String,实例对象的方法,构造,String,实例对象的方法主要有三种:,(1),采用双引号将,Java,字符序列括起来,既通过构造字符串直接量的方式构造,String,实例对象。,例如:,String s1=,”,abcd,”,;,(2),采用,new,运算符,例如:,String s1=new String();,(3),通过运算符,”,+,”,或其他成员方法生成,String,实例对象。,例如:,String s1=,”,abcd,”,+,”,1234,”,;,6.3.1生成字符串1.构造String实例对象的方法,6.3.1,生成字符串,2.StringBuffer,类的主要构造方法,(1)public StringBuffer(),创建一个空的,StringBuffer,类;,(2)public StringBuffer(int length),创建一个大小为,length,的,StringBuffer,类;,(3)public StringBuffer(String str),按,str,创建一个动态可变的,StringBuffer,类。,6.3.1生成字符串2.StringBuffer类的主要构造,6.3.2,访问字符串,所谓访问字符串,就是获得字符串的长度,得到某个字符或子串在字符串中的索引位置获得到指定位置的字符或字串。,1.String,类的常用方法,2.StringBuffer,类的常用方法,6.3.2访问字符串 所谓访问字符串,就是获得字符串的长度,,6.3.3,修改字符串,在对字符串的操作中,经常会对给定的字符串进行一些修改操作,在本小节中,我们将对类,String,和,StringBuffer,中提供的一些字符串修改方法进行介绍,主要是介绍,String,类提供的几种方法,。,6.3.3修改字符串在对字符串的操作中,经常会对给定的字符串,6.3.4,其他操作,这里将介绍一些与字符串有关的其他方法,例如:,1.startsWith(String preString),和,endWith(String endString),2.startsWith(String preString,int offsetInd),3.equals(),和,equalsIgnoreCase(),6.3.4其他操作这里将介绍一些与字符串有关的其他方法,例如,6.4,数组与容器类的比较,6.4.1,数组与容器类的区别,6.4.2Arrays,类,6.4数组与容器类的比较6.4.1数组与容器类的区别,6.4.1,数组与容器类的区别,(,1,)效率,(,2,)类型,(,3,)持有基本类型的能力,6.4.1数组与容器类的区别(1)效率,6.4.1,数组与容器类的区别,数组的简单实例:,实际上我们无论使用哪种数组,数组的标识符都只是一个引用,可以作为数组初始化的一部分隐式的创建这个对象,或用,new,表达式显式的来创建。,length,方法表示数组对象能够存储多少元素,,“,”,操作符是访问数组对象的唯一一种方式。,6.4.1数组与容器类的区别 数组的简单实例:,6.4.1,数组与容器类的区别,基本类型的容器:,数组可以保存对象的引用,也可以直接保存基本类型,而容器类只能保存对象的引用。当然容器中可以使用包装类,如,Integer,,,Byte,,,Double,等,用来代替基本类型的值。但是相对于基本数据类型,包装类使用起来不是很方便。,6.4.1数组与容器类的区别基本类型的容器:,6.4.2Arrays,类,填充数组,复制数组,比较数组,比较数组元素,binarySearch(),的用法,6.4.2Arrays类填充数组,6.5,容器,6.5.1,容器类简介,6.5.2,容器的填充,6.5.3,容器的缺点,6.5容器6.5.1容器类简介,6.5.1,容器类简介,Java2,容器类类库的用途是,“,保存对象,”,,它分为两类:,Collection,:一组独立的元素,通常这些元素都服从某种规则。,List,必须保持元素特定的顺序,而,Set,不能有重复元素。,Map,:一组成对的,“,键值对,”,对象,即其元素是成对的对象。,6.5.1容器类简介 Java2容器类类库的用途是“保存,6.5.2,容器的填充,Collections,也有一个非常实用的,static,方法集,其中有一个,fill(),方法,该方法的作用也是用同一个对象的引用来填充容器,并只对,List,对象起作用,而对,Set,或,Map,不起作用。,6.5.2容器的填充 Collections也有一个非常实用,6.5.3,容器的缺点,(,1,)我们将对象的引用加入容器时就丢失了类型的信息,也就是说对于放入容器的对象就没有类型限制了,即便是我们刻意保持容器的类型,别人也可以轻易的对其进行修改。,(,2,)由于丢失了类型信息,容器只能认为它保存的是,Object,类型的引用。因此在使用容器中的元素之前一定要做类型转换。,6.5.3容器的缺点(1)我们将对象的引用加入容器时就丢失,6.6,迭代器,迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为,“,轻量级,”,对象,因为创建它的代价小。,Java,中的,Iterator,功能比较简单,并且只能单向移动:,(1)iterator(),方法:要求容器返回一个,Iterator,。第一次调用,Iterator,的,next(),方法,它将返回序列中的第一个元素;,(2)next(),方法:获得序列中的下一个元素;,(3)hasNext(),方法:检查序列中是否还有元素;,(4)remove(),方法:将迭代器新返回的元素删除。,6.6迭代器迭代器是一种设计模式,它是一个对象,它可以遍历并,6.7,容器的分类法,6.7.1Collection,接口,6.7.2List,接口,6.7.3Set,接口,6.7.4Map,接口,6.7.5Java,集合类对,equals(),和,hashCode(),方法的要求,6.7容器的分类法6.7.1Collection 接口,6.7.1Collection,接口,Collection,类的方法,boolean add(Object obj),boolean remove(Object obj),int size(),boolean isEmpty(),boolean contains(Object obj),Iterator iterator(),boolean containsAll(Collection c),boolean addAll(Collection c),void clear(),void removeAll(Collection c),void retainAll(Collection c),6.7.1Collection 接口 Collection类,6.7.2List,接口,(1),面向位置的操作包括插入某个元素或者,Collection,的功能,还包括获取、除去或更改元素的功能。在,List,中搜索元素可以从列表的头部或尾部开始,如果找到元素,将报告元素所在的位置。,(2)List,接口不但能以位置序列迭代的遍历整个列表,而且还能处理集合的子集。,6.7.2List接口(1)面向位置的操作包括插入某个元,6.7.2List,接口,LinkedList,的主要方法,void addFirst(Object obj),void addLast(Object obj),Object getFir
展开阅读全文