动力节点-云javase零基础1-及源代码课件06数组上_第1页
动力节点-云javase零基础1-及源代码课件06数组上_第2页
动力节点-云javase零基础1-及源代码课件06数组上_第3页
动力节点-云javase零基础1-及源代码课件06数组上_第4页
动力节点-云javase零基础1-及源代码课件06数组上_第5页
免费预览已结束,剩余18页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数组(上)本节主要内容数组的声明数组的初始化数组基本概念数组是用来存储一组相同数据类型数据的数据结构。数组也是一种引用类型。数组的元素可以是简单类型的数据,也可以是引用类型的数据。数组有一个对应的索引,可以通过索引访问数组中的每个元素数组被创建好之后,它的大小是不能改变的,但是数组中的各个元素是可以被改变的一维数组定义数组的声明方式有两种:type[]arr_name;typearr_name[];在数组定义中,不能指定数组的长度,而需要在数组的创建阶段来指定几个例子:int[]array;//声明了一个int的数组floatb[];Stringc[];Date[]d;Studentstus[];数组的创建(示例5-1)在声明数组时不能指定数组的大小,也没有给数组分配存储数据的内存空间通过new操作符来创建数组对象,指定数组的大小,给数组元素的存储分配空间例如:int[]a;a=newint[100];

代码参见案例:5-1数组的创建

数组的初始化(示例5-2)在创建成功一个数组之后,它将完成如下三个动作:1.创建一个数组对象

2.在内存中给数组分配存储空间

3.给数组的元素初始化一个相应的数据类型的默认值.

例如:

int[]intArray=newint[10];; System.out.println("第一个元素默认初始化值是:"+intArray[0]);

代码参见:案例5-2数组的初始化在创建完数组后,可以对数组进行初始化,也就是给数组的各个元素进行赋值。可以采用两种方式为数组进行初始化:静态初始化动态初始化数组的静态初始化在数组定义的同时,对数组进行初始化例如:

inta[]={1,3,5,7,9,11};Strings[]={“a”,”b”,”c”};

代码参见:案例5-3数组的静态初始化注意:1.数组的大小有大扩号里的元素的个数决定

2.数组在声明不能指定大小利用这种方式进行数组的初始化,其实完成了三步动作:数组声明数组创建数组初始化数组的动态初始化(示例5-3)所谓数组的动态初始化,就是将数组的定义和数组的初始化分开来进行例子:

inta[]=newint[3];a[0]=1;a[1]=10;a[2]=100;

或者:

int[]a; a=newint[10]; for(inti=0;i<10;i++){ a[i]=2*i+1; } 简单数据类型数组的定义在定义数组的时候,系统会给这个数组分配用于存放这个数组的内存空间.它会在栈内存空间中(Heap)给数组分配一个空间用来存放数组的引用变量.如图所示(以int类型数组为例)intarr[];栈内存堆内存简单数据类型数组的创建在创建简单数据类型的数组的时候,系统会分配合适的空间用来存放该种数据类型数据的内存空间(分配在堆内存中),并且将这个数组的各个元素赋一个和数组类型匹配的初值。栈内存0int[]对象000000000堆内存arr简单数据类型数组的初始化对于简单数据类型的数组,当对其进行初始化时,会将对应的值赋给对应的各个数组元素。

arr栈内存1int[]对象2345678910堆内存例如:intk[]=newint[10];for(inti=0;i<10;i++){k[i]=i+1;}引用数据类型数组的定义引用类型数组的定义和简单类型数据类型数组的定义相同arr栈内存堆内存String[]arr;引用数据类型数组的创建引用数据类型数组在创建的时候也是首先给数组元素分配内存空间,然后给这些数组元素一个默认的初始值null。栈内存arrnullString[]对象nullnullnullnullnullnullnullnullnull堆内存arr=newString[10];引用数据类型数组的初始化在进行引用数据类型数组的初始化的时候,和简单数据类型数组的初始化有些不同,因为数组本身是引用类型,而现在数组元素也是引用类型,所以这个时候需要给数组元素所引用的对象也分配内存空间。arr栈内存*****String[]对象*********************************************堆内存onetwothureefourfivesixseveneightninetenString对象arr[0]=newString(“one”);arr[1]=newString(“two”);……arr[9]=newString(“ten”);数组元素的引用通过数组名和数组索引来引用一个数组中的元素,数组的索引从0开始到数组长度减1,如arr[0]表示数组arr中的第1个元素,数组的第二个元素为arr[1]等。可以使用数组的一个属性length来获得数组的长度。元素的索引必须小于数组的长度,否则会产生数组越界异常一维数组的应用举例利用一维数组来进行冒泡排序:对几个无序的数字进行排序,最常用的方法是所谓的冒泡排序法。这种方法每次比较两个相邻的数,将较小的放到前面,较大的放到后面,这样就可以将这些数中的最大的找出来访到最后,然后比较剩下的数,再在这些数中找出最大的来,直到所有的数字按照从小到大的顺序排列可以用一个一维数组来存放这些需要进行排序的数字,然后对这个一维数组进行排序从上面我们看到了比较了N-1次,那么第二遍就为N-2次比较了,如此类推,比较次数的公式如下:

(N-1)+(N-2)+...+1=((N-1)*N)/2所以以上总共比较次数为((5-1)*5)/2=10冒泡法代码参见案例:5-5冒泡法排序public

static

voidsort(int[]data){for(inti=data.length-1;i>0;i--){for(intj=0;j<i;j++){if(data[j]>data[j+1]){inttemp=data[j];data[j]=data[j+1];data[j+1]=temp;}}}}选择排序法选择排序对冒泡排序进行了改进,使交换次数减少,但比较次数仍然没有减少。假设有5个数字3,1,6,2,5在一个int数组中,要求按从小到大排序输出采用选择排序,选择排序是这样的,先从左端开始,找到下标为0的元素,然后和后面的元素依次比较,如果找到了比下标0小的元素,那么再使用此元素,再接着依次比较,直到比较完成所有的元素,最后把最小的和第0个位置交换。以上示例排序过程如下:

第二遍排序将从下标为1的元素开始,以此类推,经过N(N-1)/2次比较,经过N次数据交互就完成了所有元素的排序。public

static

voidmethod1(int[]data){for(inti=0;i<data.length;i++){intmin=i;for(intj=i+1;j<data.length;j++){if(data[j]<data[min]){min=j;}}//进行位置的交换if(min!=i){inttemp=data[i];data[i]=data[min];data[min]=temp;}}}数组的搜索--二分法(折半法)查找查找数组中的元素我们可以遍历数组中的所有元素,这种方式称为线性查找。线性查找适合与小型数组,大型数组效率太低。如果一个数组已经排好序,那么我们可以采用效率比较高的二分查找或叫折半查找算法假设,我们准备采用二分法取得18在数组中的位置第一步,首先取得数组0~9的中间元素中间元素的位置为:(开始下标0+结束下标9)/2=下标4

通过下标4取得对应的值1518大于15,那么我们在后半部分查找第二步,取数组4~9的中间元素

4~9的中间元素=(下标4+1+下标9)/2=下标7

下标7的值为18,查找完毕,将下标7返回即可以上就是二分或折半查找法,此种方法必须保证数组事先是排好序的,这一点一定要注意publicclassBinarySearchTest01{

publicstaticvoidmain(String[]args){ int[]data={11,12,13,14,15,16,17,18,19,20}; intindex=binarySearch(data,18); System.out.println(index); }

//采用折半法查询,必须建立在排序的基础上

privatestaticintbinarySearch(int[]data,intvalue){ //开始下标

intbeginPos=0; //结束下标

intendPos=data.length-1;

while(beginPos<=endPos){ intmidPos=(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论