1 什么是数组
数组(array)是一种最简单的复合数据类型,它是有序数据的集合,数组中的每个元素具有相同的数据类型,可以用一个统一的数组名和不同的下标来确定数组中唯一的元素。根据数组的维度,可以将其分为一维数组、二维数组和多维数组等。
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器
数组既可以存储基本数据类型,也可以存储引用数据类型
数组是一组相关数据的集合,一个数组实际上就是一连串的变量.
内存空间连续 同一种数据类型
2 数组的声明与使用
- 格式: 数据类型[] 数组名; 数组名其实就是一个变量名
2 定位数组的位置: 数组名[索引] ,比如说第0个元素: 数组名[0]
数据类型[] 数组名 = 初值
int[] array = new int[5]
注意:[ ]中5就是数组array的长度
数组的长度一旦给定 就不能修改
其中数据类型代表: 数组中盛放数据的 数据类型
数组使用下标(角标)来访问元素(保存元素) 下标从0开始
int[] array = {1,2,3,4};
int[] array = new int[5];
赋值
3 数组的使用
有三种使用方式
//第一种: 一般情况下,当我们不知道数据里面有什么内容的时候,我们会先声明一个数组,然后再去赋值
int[] array = new int[5];
array[0] = 1;
array[1] = 3;
array[2] = 5;
array[3] = 6;
array[4] = 7;
// 第二种
int[] array2 = new int[]{1,3,5,7,9};
// 第三种, 虽然我们没有明确的指定数组的长度,但是一旦声明了以后,长度就固定了
int[] array3 = {1,3,5,7,9};
// array3[5] = 10;
数组的长度 数组名.length
数组的索引 从0开始,最大的索引: 数组名.length-1
指定索引位置数组的元素:
查询:数组名[索引]
修改:数组名[索引] = 数值;
4 数组的遍历
for(int i=0;i<数组名.length;i++){
System.out.println(数组名[索引] )
}
5 数组的工具类
Arrays.toString(数组名) 如果直接打印数组名得到的是一个内存地址,我们看不懂。 就是将数
组以字符串的方式打印出来。
Arrays.copyOf(数组名,复制的长度) 得到一个新的数组
Arrays.sort(数组名) 在原来的数组上进行排序
6 冒泡排序
是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果顺序(如从大到小、首字母从Z到A)错误就把他们交换过来。 走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
很简单,上面的代码,执行一次是移动一位,那我只要让他循环移动所有位置的元素就可以了
int num = 0;
for (int i = 0; i < age.length - 1; i++) {
for (int j = 0; j <age.length - 1 - i ; j++) {
if (age[j] > age[j+1]){
num = age[j+1];
age[j+1] = age[j];
age[j] = num;
}
}
}
7 习题
经理要统计全公司的年龄并且以升序的形式打 印出来
经理要统计全公司的薪资并且以降序的形式打印出来
得出预计结果后尝试优化和调整代码编写方式
public static void main(String[] args) {
int[] ages = {26,24,29,35,33,34,37};
double[] salary = {5000,6000,3500,4000,8000,7000,9000};
for (int i = 0 ; i < ages.length-1; i++){
for (int o = 0 ; o < ages.length-1-i; o++){
if(ages[o]>ages[o+1]){
int temp = ages[o];
ages[o] = ages[o + 1];
ages[o + 1] = temp;
}
}
}
for (int p = 0 ; p<salary.length-1;p++){
for (int x = 0 ; x< salary.length-1-p;x++){
if(salary[x]>salary[x+1]){
double temp = salary[x];
salary[x] = salary[x + 1];
salary[x + 1] = temp;
}
}
}
System.out.println(Arrays.toString(ages));
System.out.println(Arrays.toString(salary));
}
今天公司招了一位开发。需求:加入新员工的年龄,并保持升序
得出预计结果后尝试优化和调整代码编写方式
public static void main(String[] args) {
int [ ] ages = {36,25,34,29,38,27};
int[] ints = Arrays.copyOf(ages, ages.length + 1);
System.out.println(Arrays.toString(ints));
Scanner scanner = new Scanner(System.in);
ints[ints.length-1] = scanner.nextInt();
System.out.println(Arrays.toString(ints));
for (int i =0;i<ints.length-1;i++){
for (int u=0;u<ints.length-1-i;u++){
if(ints[u]>ints[u+1]){
int temp = ints[u];
ints[u] = ints[u + 1];
ints[u + 1] = temp;
}
}
System.out.println(Arrays.toString(ints));
}
}
找出随机输入的5人身高中最高的
得出预计结果后尝试优化和调整代码编写方式
public static void main(String[] args) {
int[] hight = new int[5];
int min = hight[0];
Scanner scanner = new Scanner(System.in);
for (int i=0;i<hight.length;i++){
System.out.println("请输入第"+(i+1)+"个身高");
hight[i]= scanner.nextInt();
}
for (int o=0;o<hight.length;o++){
if (min<hight[o]){
min = hight[o];
System.out.println(min);
System.out.println(Arrays.toString(hight));
}
}
}