欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Java基础知识-对象数组及二维数组.ppt

    • 资源ID:70791669       资源大小:344.50KB        全文页数:72页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Java基础知识-对象数组及二维数组.ppt

    第第2章章 对象数组及二维数组对象数组及二维数组课程回顾:课程回顾:OOOO:属性:属性:属性:属性+行为行为行为行为特性:封装特性:封装特性:封装特性:封装+继承继承继承继承+多态多态多态多态第第2章章 对象数组及二维数组对象数组及二维数组Java基础知识基础知识变量、数据类型、判定语句、循环语句变量、数据类型、判定语句、循环语句变量、数据类型、判定语句、循环语句变量、数据类型、判定语句、循环语句第第2章章 对象数组及二维数组对象数组及二维数组l l用数组存储对象用数组存储对象用数组存储对象用数组存储对象 l l对数组元素进行排序对数组元素进行排序对数组元素进行排序对数组元素进行排序 l l在已排序的数组中查找在已排序的数组中查找在已排序的数组中查找在已排序的数组中查找 l l二维数组二维数组二维数组二维数组 数组元素可以是任何类型(只要所有元素数组元素可以是任何类型(只要所有元素具有相同的类型)具有相同的类型)l l数组元素可以是基本数据类型数组元素可以是基本数据类型数组元素可以是基本数据类型数组元素可以是基本数据类型l l数组元素也可以是类对象,称这样的数组为数组元素也可以是类对象,称这样的数组为数组元素也可以是类对象,称这样的数组为数组元素也可以是类对象,称这样的数组为对象对象对象对象数组数组数组数组。在这种情况下,数组的每一个元素都是一。在这种情况下,数组的每一个元素都是一。在这种情况下,数组的每一个元素都是一。在这种情况下,数组的每一个元素都是一个对象的引用。个对象的引用。个对象的引用。个对象的引用。用数组存储对象用数组存储对象例如例如例如例如,BankAccount accounts;BankAccount accounts;BankAccount accounts;BankAccount accounts;或或或或BankAccount accounts;BankAccount accounts;BankAccount accounts;BankAccount accounts;定义了一个存储定义了一个存储定义了一个存储定义了一个存储BankAccountBankAccountBankAccountBankAccount类对象的数组。类对象的数组。类对象的数组。类对象的数组。与与与与C C C C、C+C+C+C+不同,不同,不同,不同,JavaJavaJavaJava在数组的在数组的在数组的在数组的定义中并不为数组定义中并不为数组定义中并不为数组定义中并不为数组元素分配内存元素分配内存元素分配内存元素分配内存,因此,因此,因此,因此 中不需指明数组中元素的中不需指明数组中元素的中不需指明数组中元素的中不需指明数组中元素的个数,即数组长度,而且对于如上定义的数组是个数,即数组长度,而且对于如上定义的数组是个数,即数组长度,而且对于如上定义的数组是个数,即数组长度,而且对于如上定义的数组是不能引用的,不能引用的,不能引用的,不能引用的,必须经过初始化才可以引用必须经过初始化才可以引用必须经过初始化才可以引用必须经过初始化才可以引用。用数组存储对象用数组存储对象对象数组的初始化对象数组的初始化分为分为静态初始化静态初始化和和动态初始化动态初始化静态初始化:在定义数组的同时对数组元素进行静态初始化:在定义数组的同时对数组元素进行初始化,初始化,例如:例如:BankAccount accounts=new BankAccount(BankAccount accounts=new BankAccount(“Zhang“Zhang,100.00),100.00),new BankAccount(new BankAccount(“Li“Li,2380.00),2380.00),new BankAccount(new BankAccount(“Wang“Wang,500.00),500.00),new BankAccount(new BankAccount(“Liu“Liu,175.56),175.56),new BankAccount(new BankAccount(“Ma“Ma,924.02),924.02);用数组存储对象用数组存储对象动态初始化动态初始化动态初始化动态初始化:使用运算符:使用运算符newnew为数组分配空间,为数组分配空间,对对于基本类型的数组,其格式如下:于基本类型的数组,其格式如下:type arrayName=new typearraySize;type arrayName=new typearraySize;type arrayName=new typearraySize;type arrayName=new typearraySize;对对于于对对象象数数组组,使使用用运运算算符符new只只是是为为数数组组本本身身分分配配空空间间,并并没没有有对对数数组组的的元元素素进进行行初初始始化化。即即数数组组元素都为空,如图元素都为空,如图。数组元素未初始化的对象数组数组元素未初始化的对象数组用数组存储对象用数组存储对象此此时时不不能能访访问问数数组组的的任任何何元元素素,必必须须对对数数组组元元素素进进行行初初始始化化后后,才才能能访访问问。因因此此,对对于于对对象象数数组组,需需要经过两步空间分配。首先给数组分配空间:要经过两步空间分配。首先给数组分配空间:type arrayName=new typearraySize;然后给每一个数组元素分配空间:然后给每一个数组元素分配空间:arrayName0=new type(paramList);arrayNamearraySize-1=new type(paramList);用数组存储对象用数组存储对象例如:例如:例如:例如:/定义一个String类型的数组StringstringArrar;/给数组stringArray分配3个引用空间,每个引用值为null。stringArray=newString3;/下面给数组元素分配空间stringArray0=newString(“how”);stringArray1=newString(“are”);stringArray2=newString(“you”);用数组存储对象用数组存储对象当给数组元素分配了内存空间后,就可以引用了。当给数组元素分配了内存空间后,就可以引用了。数组元素的引用方式为:数组元素的引用方式为:arrayNameindexindex为为数数组组下下标标,下下标标从从0开开始始,一一直直到到数数组组长长度减度减1。下标可以是整型常数或表达式。下标可以是整型常数或表达式。Java对数组元素要进行越界检查以保证安全性。对数组元素要进行越界检查以保证安全性。同时,对于每个数组都有一个同时,对于每个数组都有一个属性属性length指明它指明它的长度(这里即是数组元素的个数)。例如,的长度(这里即是数组元素的个数)。例如,stringArray.length指明数组指明数组stringArray的长的长度。度。用数组存储对象用数组存储对象对象数组应用举例对象数组应用举例l l使用数组对一个班的学生信息及考试成绩使用数组对一个班的学生信息及考试成绩进行存储,学生信息包括学号、姓名、三进行存储,学生信息包括学号、姓名、三门课(英语、数学、计算机)的成绩及总门课(英语、数学、计算机)的成绩及总成绩。成绩。用数组存储对象用数组存储对象首先定义学生类首先定义学生类首先定义学生类首先定义学生类StudentStudentStudentStudent:属属属属性性性性包包包包括括括括:学学学学号号号号(idididid),姓姓姓姓名名名名(namenamenamename),英英英英语语语语成成成成绩绩绩绩(engengengeng),数数数数 学学学学 成成成成 绩绩绩绩(mathmathmathmath),计计计计 算算算算 机机机机 成成成成 绩绩绩绩(compcompcompcomp),总成绩(),总成绩(),总成绩(),总成绩(sumsumsumsum)。)。)。)。方方方方 法法法法 包包包包 括括括括:构构构构 造造造造 方方方方 法法法法,getgetgetget方方方方 法法法法,setsetsetset方方方方 法法法法,toStringtoStringtoStringtoString方方方方法法法法,equalsequalsequalsequals方方方方法法法法,comparecomparecomparecompare方方方方法法法法(比比比比较较较较两两两两个个个个学学学学生生生生的的的的总总总总成成成成绩绩绩绩,结结结结果果果果分分分分大大大大于于于于,小小小小于于于于,等等等等于于于于),sumsumsumsum方法(计算总成绩)。方法(计算总成绩)。方法(计算总成绩)。方法(计算总成绩)。为了能够将为了能够将为了能够将为了能够将StudentStudentStudentStudent类对象直接存储,应使其加入类对象直接存储,应使其加入类对象直接存储,应使其加入类对象直接存储,应使其加入串行化协议。代码如下:串行化协议。代码如下:串行化协议。代码如下:串行化协议。代码如下:用数组存储对象用数组存储对象/Student.javaimportjava.io.*;publicclassStudentimplementsSerializableprivateStringid;/学号privateStringname;/姓名privateinteng;/英语成绩privateintmath;/数学成绩privateintcomp;/计算机成绩privateintsum;/总成绩用数组存储对象用数组存储对象/构造方法publicStudent(Stringid,Stringname,inteng,intmath,intcomp)this.id=id;this.name=name;this.eng=eng;this.math=math;p=comp;sum();/计算总成绩用数组存储对象用数组存储对象/构造方法publicStudent(Students)this.id=s.id;this.name=newString(s.name);this.eng=s.eng;this.math=s.math;p=p;sum();/计算总成绩用数组存储对象用数组存储对象/set方法publicvoidsetId(Stringid)this.id=id;publicvoidsetName(Stringname)this.name=name;publicvoidsetEng(inteng)this.eng=eng;sum();/计算总成绩用数组存储对象用数组存储对象/set方法publicvoidsetMath(intmath)this.math=math;sum();/计算总成绩publicvoidsetComp(intcomp)p=comp;sum();/计算总成绩用数组存储对象用数组存储对象/get方法publicStringgetId()returnid;publicStringgetName()returnname;publicintgetEng()returneng;publicintgetMath()returnmath;publicintgetComp()returncomp;publicintgetSum()returnsum;用数组存储对象用数组存储对象/计算总成绩voidsum()this.sum=eng+math+comp;/toString方法publicStringtoString()returngetId()+t+getName()+t+getEng()+t+getMath()+t+getComp()+t+getSum();用数组存储对象用数组存储对象/比较两个Student对象的值是否相等publicbooleanequals(Objectx)if(this.getClass()!=x.getClass()returnfalse;Studentb=(Student)x;return(this.getId().equals(b.getId();用数组存储对象用数组存储对象/比较成绩大小,当前对象成绩比参数对象成绩大时返回1,/相等时返回0,其它返回-1.publicintcompare(StudentA)if(this.getSum()A.getSum()return1;elseif(this.getSum()=A.getSum()return0;elsereturn-1;用数组存储对象用数组存储对象下面定义班级类下面定义班级类StudentClassStudentClass:属属 性性 包包 括括:班班 级级 名名 称称(namename),容容 量量(capacitycapacity),学学生生(studentsstudents),实实际际人人数数(sizesize)。)。方法包括方法包括:构造方法,:构造方法,getget方法,方法,setset方法,方法,toString toString方法。方法。用数组存储对象用数组存储对象/StudentClass.java/定义学生班级类StudentClasspublicclassStudentClassprivateStringname;/班级名称staticintcapacity=40;/最大容量privateStudentstudents;/学生privateintsize;/实际人数 用数组存储对象用数组存储对象/构造方法构造方法publicStudentClass(Stringname,intsize)this.name=name;this.size=size;students=newStudentcapacity;用数组存储对象用数组存储对象/get方法publicStringgetName()returnname;publicintgetCapacity()returncapacity;publicStudentgetStudents()returnstudents;publicintgetSize()returnsize;用数组存储对象用数组存储对象/set方法publicvoidsetName(Stringname)this.name=name;publicvoidsetCapacity(intcapacity)this.capacity=capacity;publicvoidsetSize(intsize)this.size=size;publicvoidsetStudents(Studentstudents)for(inti=0;isize;i+)this.studentsi=newStudent(studentsi);用数组存储对象用数组存储对象/toString/toString方法方法publicStringtoString()Strings;s=班级:+name+t+容量:+capacity+t+实际人数:+size+nn;s=s+学号+t+姓名+t+英语+t+数学+t+计算机+t+总成绩n;for(inti=0;isize;i+)s=s+studentsi.getId()+t+studentsi.getName()+t+studentsi.getEng()+t+studentsi.getMath()+t+studentsi.getComp()+t+studentsi.getSum()+n;returns;用数组存储对象用数组存储对象定定定定义义义义测测测测试试试试类类类类Tester1Tester1Tester1Tester1:为为为为测测测测试试试试简简简简单单单单,仅仅仅仅生生生生成成成成具具具具有有有有5 5 5 5名名名名学学学学生生生生的的的的班班班班级级级级,5 5 5 5名名名名学学学学生生生生的的的的信信信信息息息息从从从从键键键键盘盘盘盘输输输输入入入入,为为为为了了了了避避避避免免免免以以以以后后后后再再再再重重重重复复复复输输输输入入入入,可可可可将将将将输输输输入入入入的的的的学学学学生生生生信信信信息息息息保保保保存到文件中。存到文件中。存到文件中。存到文件中。用数组存储对象用数组存储对象importjava.io.*;publicclassTester1publicstaticvoidmain(Stringargs)Studentstudents;StudentClassaClass=newStudentClass(软件06,5);students=newStudent5;for(inti=0;i5;i+)studentsi=newStudent(getAStudent(i+1);aClass.setStudents(students);System.out.println(aClass);用数组存储对象用数组存储对象/将学生信息保存到文件stu.ser中。tryFileOutputStreamfo=newFileOutputStream(stu.ser);ObjectOutputStreamso=newObjectOutputStream(fo);for(inti=0;i5;i+)so.writeObject(studentsi);so.close();catch(Exceptione)System.out.println(e);用数组存储对象用数组存储对象/从键盘输入一个学生的信息从键盘输入一个学生的信息publicstaticStudentgetAStudent(inti)Studentstudenti;System.out.println(输入第+i+个学生的信息:);System.out.print(学号:);Stringid=Keyboard.getString();System.out.print(姓名:);Stringname=Keyboard.getString();System.out.print(英语成绩:);inteng=Keyboard.getInteger();System.out.print(数学成绩:);intmath=Keyboard.getInteger();System.out.print(计算机成绩:);intcomp=Keyboard.getInteger();studenti=newStudent(id,name,eng,math,comp);returnstudenti;用数组存储对象用数组存储对象运行结果如下:运行结果如下:输入第输入第1 1个学生的信息个学生的信息:学号学号:250201250201姓名姓名:李红李红英语成绩英语成绩:8888数学成绩数学成绩:7676计算机成绩计算机成绩:6060输入第输入第2 2个学生的信息个学生的信息:班级班级:软件软件06 06 容量容量:40:40 实际人数实际人数:5 :5 学号学号 姓名姓名 英语英语 数学数学 计算机计算机 总成绩总成绩250201 250201 李红李红 88 76 60 224 88 76 60 224250202 250202 张林张林 78 67 80 225 78 67 80 225250203 250203 董玉梅董玉梅 86 80 75 241 86 80 75 241250204 250204 张力张力 70 68 75 213 70 68 75 213250205 250205 何为何为 80 90 78 248 80 90 78 248Press any key to continue.Press any key to continue.用数组存储对象用数组存储对象在班级类在班级类StudentClassStudentClass中增加常用方法:中增加常用方法:如如查查找找某某个个学学生生是是否否存存在在(findfind),增增加加一一个个学生(学生(addadd),删除一个学生(),删除一个学生(deldel)等。)等。用数组存储对象用数组存储对象(1)(1)查找查找已已知知学学生生的的学学号号,查查找找此此学学生生是是否否存存在在。如如果果存存在在,返返回回其其在数组中的下标位置;如果不存在,返回在数组中的下标位置;如果不存在,返回-1-1。顺序查找方法的代码如下:顺序查找方法的代码如下:/顺序查找publicintfind(Stringid)for(inti=0;i=0)returnfalse;/此学号已存在,不能增加/增加操作增加操作this.studentssize=newStudent(newString(aStudent.getId(),newString(aStudent.getName(),aStudent.getEng(),aStudent.getMath(),aStudent.getComp();size+;returntrue;用数组存储对象用数组存储对象(3)(3)删除删除已知一个Student对象,将此对象从数组中删除。/删除一个学生publicbooleandel(StudentaStudent)intpos=find(aStudent.getId();if(pos=-1)returnfalse;/此学号不存在,不能删除/将此学生从数组中删除./将数组元素studentspos+1.studentssize-1依次向前移动一个位置,且size的值减1.for(inti=pos+1;isize;i+)studentsi-1=studentsi;size-;returntrue;用数组存储对象用数组存储对象/已知学号已知学号,删除一个学生删除一个学生publicbooleandel(Stringid)intpos=find(id);if(pos=-1)returnfalse;/此学号不存在,不能删除/将此学生从数组中删除./将数组元素studentspos+1.studentssize-1依次向前移动一个位置,且size的值减1.for(inti=pos+1;isize;i+)studentsi-1=studentsi;size-;returntrue;用数组存储对象用数组存储对象编编写写测测试试类类Tester2Tester2:对对新新增增加加的的查查找找、增增加加及及删删除除方法进行测试。方法进行测试。用数组存储对象用数组存储对象/Tester2.javaimportjava.io.*;publicclassTester2publicstaticvoidmain(Stringargs)Studentstudents=newStudent5;/从文件stu.ser中读出学生信息。tryFileInputStreamfi=newFileInputStream(stu.ser);ObjectInputStreamsi=newObjectInputStream(fi);for(inti=0;i5;i+)studentsi=(Student)si.readObject();si.close();用数组存储对象用数组存储对象catch(Exceptione)System.out.println(e);StudentClassaClass=newStudentClass(软件04,5);aClass.setStudents(students);System.out.println(aClass);/查找,增加,删除测试for(inti=0;i2;i+)System.out.print(输入查找的学号);Stringid=Keyboard.getString();if(aClass.find(id)0)System.out.println(不存在!);elseSystem.out.println(存在!);用数组存储对象用数组存储对象for(inti=0;i2;i+)StudentaStudent=getAStudent(6+i);if(aClass.add(aStudent)System.out.println(增加成功!);elseSystem.out.println(不能增加!);for(inti=0;i2;i+)System.out.print(输入要删除的学号);Stringid=Keyboard.getString();if(aClass.del(id)System.out.println(已删除!);elseSystem.out.println(“不存在!”);System.out.println(aClass);用数组存储对象用数组存储对象l l按照预先规定的准则(如升序或降序等),按照预先规定的准则(如升序或降序等),把数据有次序地排列起来的操作称为把数据有次序地排列起来的操作称为“排排序序”或或“分类分类”(SortingSorting)。)。l l目前已经设计出许多排序算法,常用的排目前已经设计出许多排序算法,常用的排序算法有选择排序、插入排序及交换排序序算法有选择排序、插入排序及交换排序等。等。对数组元素进行排序对数组元素进行排序(1)(1)(1)(1)选择排序选择排序选择排序选择排序n n选择排序的基本思想是先在未排序序列中选一选择排序的基本思想是先在未排序序列中选一选择排序的基本思想是先在未排序序列中选一选择排序的基本思想是先在未排序序列中选一个个个个最小元素最小元素最小元素最小元素,作为已排序子序列,然后再重复,作为已排序子序列,然后再重复,作为已排序子序列,然后再重复,作为已排序子序列,然后再重复地从未排序子序列中选取一个最小元素,把它地从未排序子序列中选取一个最小元素,把它地从未排序子序列中选取一个最小元素,把它地从未排序子序列中选取一个最小元素,把它加到已经排序的序列中,作为已排序子序列的加到已经排序的序列中,作为已排序子序列的加到已经排序的序列中,作为已排序子序列的加到已经排序的序列中,作为已排序子序列的最后一个元素,直到把未排序子序列中的元素最后一个元素,直到把未排序子序列中的元素最后一个元素,直到把未排序子序列中的元素最后一个元素,直到把未排序子序列中的元素处理完为止。处理完为止。处理完为止。处理完为止。对数组元素进行排序对数组元素进行排序例例 用用选选择择排排序序方方法法将将例例1 1中中生生成成的的文文件件stu.serstu.ser中中的的班班级级学学生生按总成绩从高到低排序。按总成绩从高到低排序。在在 前前 例例 中中 的的 StudentClassStudentClass类类 中中 增增 加加 选选 择择 排排 序序 方方 法法selectionSortselectionSort:/用选择排序方法将总成绩按从高到低排序publicvoidselectionSort()Studenttemp;for(inti=0;isize-1;i+)for(intj=i+1;j0)temp=studentsi;studentsi=studentsj;studentsj=temp;对数组元素进行排序对数组元素进行排序/SortTester.java测试排序方法importjava.io.*;publicclassSortTesterpublicstaticvoidmain(Stringargs)Studentstudents=newStudent5;/从文件stu.ser中读出学生信息。tryFileInputStreamfi=newFileInputStream(stu.ser);ObjectInputStreamsi=newObjectInputStream(fi);for(inti=0;iaiajai,并且,并且aiaj+1aiaj+1。第第二二步步,将将aiai插插入入到到ajaj之之后后。将将aj+1aj+1、依依次次向向后后移移一一位位(后后移移操操作作也也可可在在第第一一步步的的查查找找过过程程中进行)。中进行)。对数组元素进行排序对数组元素进行排序例例3 3 直接插入排序举例。直接插入排序举例。根根据据上上面面的的算算法法,在在StudentClassStudentClass中中增增加加直直接接插插入入排排序序方方法法insertSortinsertSort,代码如下:代码如下:/直接插入排序方法publicvoidinsertSort()Studenttemp;for(inti=1;i-1&pare(studentsj)0)studentsj+1=studentsj;j-;studentsj+1=temp;对数组元素进行排序对数组元素进行排序顺序查找的算法简单,但在大数据量中进顺序查找的算法简单,但在大数据量中进行查找时效率较低。行查找时效率较低。在未排序的数组中进行查找,只能使用顺在未排序的数组中进行查找,只能使用顺序查找方法。对于已排序的数组,也可以序查找方法。对于已排序的数组,也可以使用顺序查找方法,但可以对算法进行一使用顺序查找方法,但可以对算法进行一定的改进,使其效率有所提高。定的改进,使其效率有所提高。在已排序的数组中查找在已排序的数组中查找例如,有一批例如,有一批IntegerInteger类型的数据已按升序排列好。类型的数据已按升序排列好。a a1 1a a2 2a an n这这批批数数据据存存储储在在数数组组a0a0、a1a1、an-1an-1中中,现现在在要要对对该该数数组组进进行行查查找找,看看给给定定的的数数据据x x是否在此数组中。是否在此数组中。由由于于数数组组中中的的元元素素已已按按升升序序排排列列,因因此此,在在查查找找时时,x x不不需需要要与与数数组组中中的的每每个个元元素素都都进进行行比比较较。假假如如按按从从左左向向右右的的顺顺序序查查找找,当当x x小小于于aiai时时就就应该停止查找。改进的顺序查找方法如下:应该停止查找。改进的顺序查找方法如下:在已排序的数组中查找在已排序的数组中查找publicintseqSearch(intx)for(inti=0;(i=ai.intValue();i+)if(ai.intValue()=x)returni;return-1;在已排序的数组中查找在已排序的数组中查找对对于于已已排排序序的的数数组组,还还可可以以使使用用效效率率更更高高的的查查找找方方法法,比比较较典典型型的的方方法法有有二二分分查查找找。同同样样是是上上面面的的问问题,可以用下面的方法:题,可以用下面的方法:在在0 0到到n-1n-1中中间间选选一一个个正正整整数数k k,用用k k把把原原来来的的有有序序数数列列分为三个有序子序列:分为三个有序子序列:I1:a0I1:a0,a1a1,ak-1ak-1I2:akI2:akI3:ak+1I3:ak+1,ak+2ak+2,an-1an-1在已排序的数组中查找在已排序的数组中查找然然后后,用用akak与与x x比比较较,若若x x等等于于akak,查查找找结结束束;若若x x小小于于akak,则则用用同同样样的的方方法法把把序序列列a0a0,a1a1,ak-1ak-1分成三个序列;分成三个序列;若若 x x akak,也也 用用 同同 样样 的的 方方 法法 把把 序序 列列 ak+1ak+1,ak+2ak+2,an-1an-1分成三个序列,分成三个序列,这这样样每每分分一一次次,要要查查找找的的范范围围就就缩缩小小一一半半。这这个个过过程程进进行行下下去去,直直到到找找到到x x,或或查查找找的的范范围围内内已已没没有有数据数据(这种情况说明这种情况说明x x不存在不存在)。这这是是一一种种应应用用分分治治策策略略的的解解题题思思想想。当当k=1/2 k=1/2 时时,称为二分查找法,或二分检索法。称为二分查找法,或二分检索法。在已排序的数组中查找在已排序的数组中查找例例 二分查找举例。二分查找举例。下下面面定定义义具具有有排排序序数数组组的的类类SortedIntArraySortedIntArray。其其中中,searchsearch方方法法运运用用二二分分查查找找算算法法在在给给定定的的数数组组范范围围内内查查找找某某一一元元素素,如如果果存存在在,返返回回元元素素所所在在的的下下标标位位置置,如如果果不不存存在在,则则返返回回元元素素应应该该在在的的位置。位置。将将此此功功能能与与插插入入功功能能相相结结合合,又又可可实实现现对对数数组组元元素进行排序。素进行排序。在已排序的数组中查找在已排序的数组中查找publicclassSortedIntArrayprivateintcapacity;privateIntegerrep;privateintsize;/size的缺省值为0/构造方法publicSortedIntArray(intn)capacity=n;rep=newIntegercapacity;/无参的构造方法publicSortedIntArray()this(100);在已排序的数组中查找在已排序的数组中查找/下面的方法运用二分查找算法在下标从下面的方法运用二分查找算法在下标从lowerlower到到upperupper范围内的数组范围内的数组/元素中查找第一个不小于新元素的数组元素的下标。元素中查找第一个不小于新元素的数组元素的下标。privateintsearch(inti,intlower,intupper)intindex=lower;if(upper=lower)intmiddle=(upper+lower)/2;intcurrent=repmiddle.intValue();if(current=i)index=middle;elseif(currentindex;-j)repj=repj-1;repindex=newInteger(i);+size;returnthis;在已排序的数组中查找在已排序的数组中查找/在数组中删除一个元素。只删除查到的第一个元素。publicSortedIntArrayremove(inti)intindex=search(i);if(repindex.intValue()=i)-size;for(intj=index;jsize;+j)repj=repj+1;returnthis;publicStringtoString()StringtoReturn=;for(inti=0;isize;+i)toReturn+=repi.toString()+,;returntoReturn;在已排序的数组中查找在已排序的数组中查找/主方法staticpublicvoidmain(Stringargs)SortedIntArrayanArray=newSortedIntArray();anArray.insert(4).insert(9).insert(7).insert(1).insert(3).insert(2).insert(8).insert(7);System.out.println(anArray);anArray.remove(1).remove(8).remove(7).remove(3);System.out.println(anArray);运行结果如下:运行结果如下:1,2,3,4,7,7,8,9,2,4,7,9,Press any key to continue.在已排序的数组中查找在已排序的数组中查找l数组元素的类型除了可以是基本数据类型、数组元素的类型除了可以是基本数据类型、类对象外,还可以是数组。前面介绍的数类对象外,还可以是数组。前面介绍的数组也称为一维数组,如果一维数组的元素组也称为一维数组,如果一维数组的元素又是一维数组,则称此数组为二维数组。又是一维数组,则称此数组为二维数组。二维数组常用来表示二维表,即以行二维数组常用来表示二维表,即以行(rows)(rows)及列及列(columns)(columns)的方式组织数据的方式组织数据。二维数组二维数组二维数组的定义方式如下:二维数

    注意事项

    本文(Java基础知识-对象数组及二维数组.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开