05数组Word格式.docx
- 文档编号:17596991
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:21
- 大小:151.15KB
05数组Word格式.docx
《05数组Word格式.docx》由会员分享,可在线阅读,更多相关《05数组Word格式.docx(21页珍藏版)》请在冰豆网上搜索。
数组有两种创建方式
●第一种,使用new操作符来创建数组,格式为:
new数组元素的数据类型[数组元素的个数]
1.基本类型的数组
publicclassArrayTest01{
publicstaticvoidmain(String[]args){
//声明int类型的数组,长度为5
//数组中的元素必须为int类型
int[]data=newint[5];
//对数组中的元素进行赋值,如果不赋值默认为该类型的默认值,以上数组默认为0
//如何赋值?
变量名[下标],下标从0开始
data[0]=1;
data[1]=2;
data[2]=3;
data[3]=4;
data[4]=5;
//输出数组中的元素,变量名[下标]
System.out.println(data[0]);
System.out.println(data[1]);
System.out.println(data[2]);
System.out.println(data[3]);
System.out.println(data[4]);
System.out.println("
-----------------------"
);
//采用length属性可以取得数组的长度
for(inti=0;
i<
data.length;
i++){
System.out.println(data[i]);
}
//输出指定的数组元素
data[3]="
+data[3]);
//会抛出ArrayIndexOutOfBoundsException异常
//数组下标越界
data[10]="
+data[10]);
//不能成功赋值,数组中的类型必须是一种类型
//data[0]="
iiii"
;
}
}
内存结构
int[]data=newint[5];
data[0]=1;
必须清楚数组为引用类型,它在堆中分配
2.引用类型的数组
【示例代码】
publicclassArrayTest02{
//声明引用类型的数组
Student[]student=newStudent[2];
//出现空指针
//因为引用类型的数组,它采用null作为默认的初始化值
student[0].id=1001;
student[0].name="
张三"
student[1].id=1002;
student[1].name="
李四"
classStudent{
intid;
Stringname;
修正空指针
publicclassArrayTest03{
//初始数组元素为Student对象
/*
student[0]=newStudent();
student[1]=newStudent();
*/
//可以采用如下方式赋值
Studentzhangsan=newStudent();
zhangsan.id=1001;
zhangsan.name="
student[0]=zhangsan;
Studentlisi=newStudent();
lisi.id=1002;
lisi.name="
student[1]=lisi;
student.length;
System.out.println("
id="
+student[i].id+"
name="
+student[i].name);
}
Student[]student=newStudent[2];
●第二种,使用数组的初始化语句,格式为:
数组元素的类型[]变量名称={数组元素1,数组元素2,......数组元素n}或数组元素的类型变量名称[]={数组元素1,数组元素2,......数组元素n}
publicclassArrayTest04{
//静态初始化
int[]data={1,2,3,4,5};
Student[]students={zhangsan,lisi};
students.length;
+students[i].id+"
+students[i].name);
2.3、二维数组的声明和使用
1
2
3
4
5
6
二维数组属于多维数组,那么什么是多维数组呢,当数组元素的类型是数组时就成了多维数组,二维数组的声明格式如下:
1.数组元素的数据类型[][]变量名;
2.数组元素的数据类型变量名[][];
其中方括号的个数就是数组的维数,声明二维数组如下:
int[][]data;
在这里介绍三种二维数组的创建方式
1.采用new关键字直接创建
publicclassArrayTest05{
//声明二维数组
int[][]data=newint[2][3];
//对二维数组赋值
data[0][0]=1;
data[0][1]=2;
data[0][2]=3;
data[1][0]=4;
data[1][1]=5;
data[1][2]=6;
//输出二维数组
for(intj=0;
j<
data[i].length;
j++){
System.out.println(data[i][j]);
}
int[][]data=newint[2][3];
2.从高维开始逐维创建
publicclassArrayTest06{
//从高维开始逐维创建
int[][]data=newint[2][];
data[0]=newint[2];
data[1]=newint[4];
data[1][0]=1;
data[1][1]=2;
data[1][2]=3;
data[1][3]=4;
3.采用初始化语句块创建数组对象
publicclassArrayTest07{
//静态初始化
int[][]data={{1,2},{1,2,3,4}};
2.4、数组的排序
2.4.1、冒泡排序
假设有5个数字3,1,6,2,5在一个int数组中,要求按从小到大排序输出
如何采用冒泡排序算法呢?
冒泡排序的算法是这样的,首先从数组的最左边开始,取出第0号位置(左边)的数据和第1号位置(右边)的数据,如果左边的数据大于右边的数据,则进行交换,否而不进行交换。
接下来右移一个位置,取出第1个位置的数据和第2个位置的数据,进行比较,如果左边的数据大于右边的数据,则进行交换,否而不进行交换。
沿着这个算法一直排序下去,最大的数就会冒出水面,这就是冒泡排序。
以上示例排序过程如下:
第一遍排序
从上面我们看到了比较了N-1次,那么第二遍就为N-2次比较了,如此类推,比较次数的公式如下:
(N-1)+(N-2)+...+1=((N-1)*N)/2
所以以上总共比较次数为((5-1)*5)/2=10
以上就是冒泡排序算法
publicclassArraySortTest01{
int[]data={3,1,6,2,5};
for(inti=data.length-1;
i>
0;
i--){
i;
if(data[j]>
data[j+1]){
inttemp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
2.4.2、选择排序
选择排序对冒泡排序进行了改进,使交换次数减少,但比较次数仍然没有减少。
采用选择排序,选择排序是这样的,先从左端开始,找到下标为0的元素,然后和后面的元素依次比较,如果找到了比下标0小的元素,那么再使用此元素,再接着依次比较,直到比较完成所有的元素,最后把最小的和第0个位置交换。
第二遍排序将从下标为1的元素开始,以此类推,经过N(N-1)/2次比较,经过N次数据交互就完成了所有元素的排序。
publicclassArraySortTest02{
intmin=i;
for(intj=i+1;
if(data[j]<
data[min]){
min=j;
//进行位置的交换
if(min!
=i){
inttemp=data[i];
data[i]=data[min];
data[min]=temp;
System.out.println(data[i]);
2.5、数组的搜索
2.5.1、二分法(折半法)查找
查找数组中的元素我们可以遍历数组中的所有元素,这种方式称为线性查找。
线性查找适合与小型数组,大型数组效率太低。
如果一个数组已经排好序,那么我们可以采用效率比较高的二分查找或叫折半查找算法。
见示例
数值
11
12
13
14
15
16
17
18
19
20
下标
7
8
9
假设,我们准备采用二分法取得18在数组中的位置
●第一步,首先取得数组0~9的中间元素
中间元素的位置为:
(开始下标0+结束下标9)/2=下标4
通过下标4取得对应的值15
18大于15,那么我们在后半部分查找
●第二步,取数组4~9的中间元素
4~9的中间元素=(下标4+1+下标9)/2=下标7
下标7的值为18,查找完毕,将下标7返回即可
以上就是二分或折半查找法,此种方法必须保证数组事先是排好序的,这一点一定要注意
publicclassBinarySearchTest01{
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=(beginPos+endPos)/2;
if(value==data[midPos]){
returnmidPos;
}elseif(value>
data[midPos]){
beginPos=midPos+1;
}elseif(value<
endPos=midPos-1;
return-1;
}
2.6、Arrays工具类
了解sort、fill和binarySearch
2.6.1、Arrays.sort的使用
importjava.util.Arrays;
publicclassArraysUtilTest01{
Arrays.sort(data);
----------------"
=0;
2.6.2、Arrays.binarySearch的使用
publicclassArraysUtilTest02{
"
intindex=Arrays.binarySearch(data,3);
index="
+index);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 05 数组