(1.8)java基础语法自述--数组
程序员文章站
2022-05-21 21:04:38
...
(1.8)java基础语法自述–数组
一,创建数组
数组是一个固定长度的,包含了相同类型数据的 容器
-
申明数组 ,
- 注意仅仅是这一句只是申明,不会创建
int [] a; //申明了一个数组变量 //int 表示数组里的每一个元素都是一个整数,[]表示该变量是一个数组,a 是变量名。
-
创建数组,
- 创建数组的时候,要指明数组的长度。new int[5]
- 引用概念:如果变量代表一个数组,比如a,我们把a叫做引用
- 声明一个引用 int[] a,
- a = new int[5],让a这个引用,指向数组
//声明一个引用 int[] a; //创建一个长度是5的数组,并且使用引用a指向该数组 a = new int[5]; int[] b = new int[5]; //声明的同时,指向一个数组
-
访问数组
- 数组下标为从0开始
- 即下标为0的第一个数代表数组里的第一个数
-
数组长度
- .length属性用于访问一个数组的长度,访问长度为0—length-1,超过这个范围就会产生越界异常。
system.out.println(a.length);
二,初始化数组
主要是分配空间与赋值
- 当分配空间与赋值分步进行
int[] a = new int[5]; //分配了长度是5的数组,但是没有赋值
//没有赋值,那么就会使用默认值
//作为int类型的数组,默认值是0
System.out.println(a[0]);
//进行赋值
a[0] = 100;
a[1] = 101;
a[2] = 103;
a[3] = 120;
a[4] = 140;
- 分配空间,同时赋值
//写法一: 分配空间同时赋值
int[] a = new int[]{100,102,444,836,3236};
//写法二: 省略了new int[],效果一样
int[] b = {100,102,444,836,3236};
//写法三:同时分配空间,和指定内容
//在这个例子里,长度是3,内容是5个,产生矛盾了
//所以如果指定了数组的内容,就不能同时设置数组的长度
int[] c = new int[3]{100,102,444,836,3236};//报错
三,排序
-
选择排序
- 把第一位和其他所有的进行比较,只要比第一位小的,就换到第一个位置来
- 比较完后,第一位就是最小的
- 然后再从第二位和剩余的其他所有进行比较,只要比第二位小,就换到第二个位置来
- 比较完后,第二位就是第二小的,依次类推。
-
冒泡排序
- 第一步:第一位开始,把相邻两位进行比较,交换将大的放后面,循环一般,最后一位就是最大的
- 第二步:再来一遍,但最后一位不用比较了
- 以此类推
四,增强型for循环
-
增强型for循环在遍历一个数组的时候会更加快捷
-
注:增强型for循环只能用来取值,却不能用来修改数组里的值
int values [] = new int[]{18,62,68,82,65,9};
//常规遍历
for(int i=0;i<values.length;i++){
int each = values[i];
system.out.println(each);
}
//增强型for循环
for(int each:values){
system.out.println(each);
}
五,java如何复制数组
-
数组的长度是不可变的,一旦分配好空间,是多长,就多长,不能增加也不能减少
-
复制数组:把一个数组的值,复制到另一个数组中
//方法一
System.arraycopy(原数组,从原数组复制的起始位置,目标数组,复制到目标数组的起始位置,复制的长度)
//方法二
for循环
六,二维数组
- 二维数组里的每一个元素,都是一个一维数组,所以二维数组也叫数组的数组
int b[][] = new int[][]{
{1,2,3},
{2,3,4},
{3,4,5}
};
- 初始化二维数组
//初始化二维数组,
int[][] a = new int[2][3]; //有两个一维数组,每个一维数组的长度是3
a[1][2] = 5; //可以直接访问一维数组,因为已经分配了空间
//只分配了二维数组
int[][] b = new int[2][]; //有两个一维数组,每个一维数组的长度暂未分配
b[0] =new int[3]; //必须事先分配长度,才可以访问
b[0][2] = 5;
//指定内容的同时,分配空间
int[][] c = new int[][]{
{1,2,4},
{4,5},
{6,7,8,9}
};
七,Arrays
- Arrays是针对数组的工具类,可以进行 排序,查找,复制填充等功能。 大大提高了开发人员的工作效率。
- copyOfRange ()
- 与使用System.arraycopy进行数组复制类似的, Arrays提供了一个copyOfRange方法进行数组复制。
- 不同的是System.arraycopy,需要事先准备好目标数组,并分配长度。 copyOfRange 只需要源数组就可以了,通过返回值,就能够得到目标数组了。
- 除此之外,需要注意的是 copyOfRange 的第3个参数,表示源数组的结束位置,是取不到的
int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
// copyOfRange(int[] original, int from, int to)
// 第一个参数表示源数组
// 第二个参数表示开始位置(取得到)
// 第三个参数表示结束位置(取不到)
int[] b = Arrays.copyOfRange(a, 0, 3);
- 转换为字符串:toString(a)
- 如果要打印一个数组的内容,就需要通过for循环来挨个遍历,逐一打印
- 但是Arrays提供了一个toString()方法,直接把一个数组,转换为字符串,这样方便观察数组的内容
int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
String content = Arrays.toString(a);
System.out.println(content);
-
排序:sort(a)
- sort()将数组按照从小到大重新自动排列
-
搜索:binarySearch(a,位号)
-
查询元素出现的位置
-
需要注意的是,使用binarySearch进行查找之前,必须使用sort进行排序
-
如果数组中有多个相同的元素,查找结果是不确定的.
-
int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
Arrays.sort(a);//将数组排列
System.out.println(Arrays.toString(a));
//使用binarySearch之前,必须先使用sort进行排序
System.out.println("数字 62出现的位置:"+Arrays.binarySearch(a, 62));
- 判断是否相同: .equals(a,b)
- 比较两个数组的内容是否一样,不一样返回false。
int a[] = new int[] { 18, 62, 68, 82, 65, 9 };
int b[] = new int[] { 18, 62, 68, 82, 65, 8 };
System.out.println(Arrays.equals(a, b));
- 填充: .fill()
- 使用同一个值,填充整个数组
int a[] = new int[10];
Arrays.fill(a, 5);
System.out.println(Arrays.toString(a));
上一篇: PHP大转盘中奖概率算法实例
下一篇: input date设置时间