《第6章数组字符串及容器类ppt课件》由会员分享,可在线阅读,更多相关《第6章数组字符串及容器类ppt课件(45页珍藏版)》请在金锄头文库上搜索。
1、第第6章章 数组、字符串及容器类数组、字符串及容器类 数组类型属于复合数据类型,它是由类型一样的元素组成的有序的数据集合。因此数组最主要的特点是:1元素类型一样;2元素有序;3一切元素公用一个称号。 另外,根据组织数组的构造不同,数组可以分为一维数组、二维数组、,依此类推。第第6 6章章 数组、字符串及容器类数组、字符串及容器类n6.1一维数组n6.2多维数组n6.3字符串处置 n6.4数组与容器的比较 n6.5容器n6.6迭代器n6.7容器的分类法n6.8总结n6.9习题6.16.1一维数组一维数组 n6.1.1一维数组的声明n6.1.2一维数组的初始化n6.1.3一维数组的援用6.1.16
2、.1.1一维数组的声明一维数组的声明n数组声明的语法格式有以下两种:narraytype array-name;n或narraytype array-name;n例如:nint month_days;n或nint month_days;6.1.26.1.2一维数组的初始化一维数组的初始化 n静态初始化是在定义数组的同时对数组元素进展初始化:nStringstrName=“I,like,Java!;nStringstrName=“I,like,Java!;n数组的动态初始化:n数组名=new数组元素类型长度;即:array-name=newtypearraySize;nP1246.1.36.1.
3、3一维数组的援用一维数组的援用 n所谓数组元素的援用,指的是如何在程序中援用初始化后的数组元素,援用的方式为arrayNameindex,其中index为数组的下标,可以是整型常数、变量和表达式,范围是从0开场,不断到数组的长度减一。n例如:ninta=1,2,3,4,5;na0=1;a1=2;a2=3;a3=4;a4=5;np1256.26.2多维数组多维数组n6.2.1二维数组的声明n6.2.2二维数组的初始化n6.2.3二维数组的援用6.2.16.2.1二维数组的声明二维数组的声明 n二维数组和一维数组一样,也必需先声明再创建,声明和创建也可以合在一条语句中完成。二维数组声明的格式为:n
4、数组元素类型数组名;n或n数组元素类型数组名;6.2.26.2.2二维数组的初始化二维数组的初始化n二维数组的初始化也分为静态初始化和动态初始化两种。所谓静态初始化,就是在定义二维数组的同时为数组分配了空间,如下:nintint_array=1,1,1,2,2,2,3,3,3;n对于二维数组的动态初始化,可以有两种方法:n1直接为每一维分配空间,格式如下:narrayName=newtypearrayLen1arrayLen2;n2从最高维开场,分别为每一维分配空间,格式如下:narrayName=newtypearrayLen1;6.2.36.2.3二维数组的援用二维数组的援用n对二维数组中
5、元素的援用格式如下:narrayNameindex1index2;n其中arrayName代表二维数组的称号,index1和index2是下标,与一维数组一样,这两个下标可以是常数、变量和表达式,如int_array12、int_arraya1、int_arraya*20,而且每一维的下标都是从0开场,不断到该维长度减一。np129页6.36.3字符串处置字符串处置 n6.3.1生成字符串n6.3.2访问字符串n6.3.3修正字符串n6.3.4其他操作6.3.16.3.1生成字符串生成字符串n1.构造String实例对象的方法n构造String实例对象的方法主要有三种:n(1)采用双引号将Ja
6、va字符序列括起来,既经过构造字符串直接量的方式构造String实例对象。n例如:Strings1=abcd;n(2)采用new运算符n例如:Strings1=newString();n(3)经过运算符+或其他成员方法生成String实例对象。n例如:Strings1=abcd+1234;6.3.16.3.1生成字符串生成字符串n2.StringBuffer类的主要构造方法n(1)publicStringBuffer()创建一个空的StringBuffer类;n(2)publicStringBuffer(intlength)创建一个大小为length的StringBuffer类;n(3)pub
7、licStringBuffer(Stringstr)按str创建一个动态可变的StringBuffer类。6.3.26.3.2访问字符串访问字符串 n所谓访问字符串,就是获得字符串的长度,得到某个字符或子串在字符串中的索引位置获得到指定位置的字符或字串。n1.String类的常用方法n2.StringBuffer类的常用方法6.3.36.3.3修正字符串修正字符串n在对字符串的操作中,经常会对给定的字符串进展一些修正操作,在本小节中,我们将对类String和StringBuffer中提供的一些字符串修正方法进展引见,主要是引见String类提供的几种方法。6.3.46.3.4其他操作其他操作n
8、这里将引见一些与字符串有关的其他方法,例如:n1.startsWith(StringpreString)和endWith(StringendString)n2.startsWith(StringpreString,intoffsetInd)n3.equals()和equalsIgnoreCase()n6.46.4数组与容器类的比较数组与容器类的比较n6.4.1数组与容器类的区别n n6.4.2Arrays类 6.4.16.4.1数组与容器类的区别数组与容器类的区别 1效率 2类型3持有根本类型的才干 6.4.16.4.1数组与容器类的区别数组与容器类的区别 n数组的简单实例:n实践上我们无论运
9、用哪种数组,数组的标识符都只是一个援用,可以作为数组初始化的一部分隐式的创建这个对象,或用new表达式显式的来创建。length方法表示数组对象可以存储多少元素,“操作符是访问数组对象的独一一种方式。6.4.16.4.1数组与容器类的区别数组与容器类的区别n根本类型的容器:根本类型的容器:n数组可以保管对象的援用,也可以直接数组可以保管对象的援用,也可以直接保管根本类型,而容器类只能保管对象保管根本类型,而容器类只能保管对象的援用。当然容器中可以运用包装类,的援用。当然容器中可以运用包装类,如如IntegerInteger,ByteByte,DoubleDouble等,用来替代等,用来替代根本
10、类型的值。但是相对于根本数据类根本类型的值。但是相对于根本数据类型,包装类运用起来不是很方便。型,包装类运用起来不是很方便。 6.4.2Arrays6.4.2Arrays类类n填充数组n复制数组n比较数组n比较数组元素nbinarySearch()的用法6.56.5容器容器n6.5.1容器类简介n6.5.2容器的填充n6.5.3容器的缺陷6.5.16.5.1容器类简介容器类简介Java2容器类类库的用途是“保管对象,它分为两类:Collection:一组独立的元素,通常这些元素都服从某种规那么。List必需坚持元素特定的顺序,而Set不能有反复元素。Map:一组成对的“键值对对象,即其元素是成
11、对的对象。6.5.26.5.2容器的填充容器的填充 nCollections也有一个非常适用的static方法集,其中有一个fill()方法,该方法的作用也是用同一个对象的援用来填充容器,并只对List对象起作用,而对Set或Map不起作用。6.5.36.5.3容器的缺陷容器的缺陷 1我们将对象的援用参与容器时就丧失了类型的信息,也就是说对于放入容器的对象就没有类型限制了,即使是我们刻意坚持容器的类型,他人也可以随便的对其进展修正。2由于丧失了类型信息,容器只能以为它保管的是Object类型的援用。因此在运用容器中的元素之前一定要做类型转换。6.66.6迭代器迭代器n迭代器是一种设计方式,它是
12、一个对象,它可以遍历并选择序列中的对象,而开发人员不需求了解该序列的底层构造。迭代器通常被称为“轻量级对象,由于创建它的代价小。Java中的Iterator功能比较简单,并且只能单向挪动:n(1)iterator()方法:要求容器前往一个Iterator。第一次调用Iterator的next()方法,它将前往序列中的第一个元素;n(2)next()方法:获得序列中的下一个元素;n(3)hasNext()方法:检查序列中能否还有元素;n(4)remove()方法:将迭代器新前往的元素删除。6.76.7容器的分类法容器的分类法n6.7.1Collection接口n6.7.2List接口n6.7.3
13、Set接口n6.7.4Map接口n6.7.5Java集合类对equals()和hashCode()方法的要求6.7.1Collection 6.7.1Collection 接口接口 nCollection类的方法nbooleanadd(Objectobj)nbooleanremove(Objectobj)nintsize()nbooleanisEmpty()nbooleancontains(Objectobj)nIteratoriterator()nbooleancontainsAll(Collectionc)nbooleanaddAll(Collectionc)nvoidclear()nvo
14、idremoveAll(Collectionc)nvoidretainAll(Collectionc)6.7.2List6.7.2List接口接口 n(1) 面向位置的操作包括插入某个元素或者Collection的功能,还包括获取、除去或更改元素的功能。在 List 中搜索元素可以从列表的头部或尾部开场,假设找到元素,将报告元素所在的位置 。n(2) List 接口不但能以位置序列迭代的遍历整个列表,而且还能处置集合的子集 。6.7.2List6.7.2List接口接口nLinkedList的主要方法nvoidaddFirst(Objectobj)nvoidaddLast(Objectobj)
15、nObjectgetFirst()nObjectgetLast()nObjectremoveFirst()nObjectremoveLast()nLinkedList()nLinkedList(Collectionc)6.7.2List6.7.2List接口接口nArrayList类的主要方法nvoidensureCapacity(intminCapacity)nvoidtrimToSize()6.7.3Set6.7.3Set接口接口nSet 接口承继 Collection 接口,而且它不允许集合中存在反复项,每个详细的 Set 实现类依赖添加的对象的 equals()方法来检查独一性。Set
16、接口没有引入新方法,所以Set就是一个Collection,只不过其行为不同 。6.7.3Set6.7.3Set接口接口nSortedSet类的主要方法nComparatorcomparator()nObjectfirst()nObjectlast()nSortedSetsubSet(ObjectbeginElement,ObjectendElement)nSortedSetheadSet(ObjectendElement)nSortedSettailSet(ObjectbeginElement)6.7.3Set6.7.3Set接口接口nHashSet类的主要方法nHashSet()nHash
17、Set(Collectionc)nHashSet(intinitCapacity)nHashSet(intinitCapacity,floatloadFactor)6.7.3Set6.7.3Set接口接口nTreeSet类的主要方法nTreeSet()nTreeSet(Collectionc)nTreeSet(Comparatorc)nTreeSet(SortedSets)6.7.3Set6.7.3Set接口接口nLinkedHashSet类的主要方法nLinkedHashSet()nLinkedHashSet(Collectionc)nLinkedHashSet(intinitCapacit
18、y)nLinkedHashSet(intinitCapacity,floatloadFactor)6.7.4Map6.7.4Map接口接口nMap接口的主要方法nObjectput(Objectkey,Objectvalue)nObjectremove(Objectkey)nvoidputAll(Mapt)nvoidclear()nObjectget(Objectkey)nbooleancontainsKey(Objectkey)nbooleancontainsValue(Objectvalue)nintsize()booleanisEmpty()nSetkeySet()Collectionv
19、alues()6.7.5Java6.7.5Java集合类对集合类对equals()equals()和和hashCode()hashCode()方法的要求方法的要求 n为了保证Java集合正常任务,有些Java集合类HashSet、TreeSet、HashMap、TreeMap对存放的对象有特殊的要求。n另外,要了解重写hashCode()的重要性。6.86.8总结总结本章主要引见了一维数组、二维数组以及字符串的处置,其中对一维数组和二维数组主要引见了它们如何声明,如何初始化以及如何援用。另外我们对字符串处置的引见,主要包括字符串的生成,访问,修正和其他相关操作。最后我们引见了数组与容器类比较,
20、然后着重引见的就是容器类的内容,同时,对Java集合类中非常重要的两个方法:equals()和hashCode()方法进展了阐明。练习练习11.定义一个长度为10的整数数组,然后将1120分别赋给数组元素,计算该数组中下标为偶数的元素的和。2.写一个方法,完成交换字符串中的子串的功能。3.写一个程序,用来计算单词在一个文本文件中的反复出现的次数。4.Java数组的特点是什么?如何创建和运用对象数组。5.编写一个程序,运用二维数组来求解线性方程组。练习练习26.阅读下面的程序,看看能否存在问题,假设存在问题,在不改动程序构造的根底上修正存在的错误,使其可以编译运转。/第6章习题6,Example
21、6_6.javaclassExample6_6publicstaticvoidmain(Stringargs)aArray=“IlikeJava!,Javaisalanguage.Weshouldlearnitwell!;for(i=0;i=aArray.length;i+)System.out.prinln(aArrayi);System.out.prinln(aArrayi.toLowerCase();System.out.prinln(aArrayi.toUpperCase();练习练习37.用键盘输入一个字符串,编写程序统计此字符串中字母、空格和数字的个数。8.编写程序,完成打印输出杨辉三角,要求格式如下: 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 11 7 21 35 35 21 7 练习练习49.编写程序,利用LinkedList来实现堆栈的操作。10.编写程序,利用LinkedList来实现队列的操作。练习练习511.运用Interator类,把学习成果存放在一个键表中,并用两种方法实现遍历链表,同时比较遍历速度即用Iteratorlei和不运用这个类。12.运用堆栈构造输出的假设干项,其中=2+2,且=2,=6。下课!