整篇文章为对java数组的完整理解以及部分排序,并有一些简单的demo,经典的案例与蓝桥杯的一些经典数组题有专门的文章梳理。
目录
数组概述
什么是数组
数组的结构
数组的特点:
数组分类
一维数组声明与赋值
数组的常用属性与方法
数组的遍历
一维数组demo案例
数组随机赋值
选择排序
冒泡排序
增强for循环
二维数组声明
二维数组练习题:
交叉数组
交叉数组遍历
总结:
单个变量能存储信息。
如果有批量数据需要存储,单个变量存储时间和空间上不经济和实用,而且过于麻烦,这时候需要用数组这一引用数据类型来存储。
数组: 用来存储具有相同数据类型的数据的集合,可以使用共同的名字来引用数组中存储的数据。
特点: 数组可以存储任何类型的数据,包括原始数据类型和引用数据类型,但是一旦指定了数组的类型之后,就只能用来存储指定类型的数据。
数组是一个变量,用于将相同数据类型的数据存储在内存空间中,数组中的所有元素必须属于相同的数据类型。
栈(stack)与堆(heap)都是Java用来在Ram(随机存取存储器)中存放数据的地方。
与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆。
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据在多个线程或者多个栈之间是不可以共享的,但是在栈内部多个值相等的变量是可以指向一个地址的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动态分配内存,存取速度较慢。
数组为了在内存中能够存取多个数据更加方便,在设计数组时,数组的结构和基本要素都与生活中的电子储物柜非常类似。
在Java语言中,存在多种形式的数组。
int [] array;//整数数组 int array[]= new int[10];
int[] array= new int[10];
int[] array= new int[10]; //数组的长度 array.length; //自然排序 Arrays.sort(array)
int [] a=new int[10]; for (int i = 0; i < a.length; i++) { a[i]=i+1; } for (int i = 0; i < a.length; i++) { System.out.print(a[i]+","); }
问题描述:输入本部门5位员工的薪资,并根据用户输入的序号为指定员工进行提薪。若用户输入序号出现越界,则提示错误。要求:薪资的涨幅不能超过原薪资的20%,若涨幅超过20%,则按照原薪资的20%进行提薪。
package Action; import java.util.Random; public class demos { public static void main(String[] args) { // 声明随机数 Random ra = new Random(); int[] arrays = new int[10]; // 赋值 for (int i = 0; i < arrays.length; i++) { arrays[i] = ra.nextInt(50); } // 遍历 for (int i = 0; i < arrays.length; i++) { System.out.print(arrays[i] + ","); } } }
算法中经常会用到某个班级、某个公司、某个集体中随机选某些人,或者棋牌类游戏进行棋牌的分发,彩票的出奖,红包随机分发匹配人员等操作。 所以,我们需要使用一定的算法进行获取一定数量的不重复的随机数数组。
package Action; public class demos { public static void main(String[] args) { int count = 0; int[] arr = { 9, 12, 31, 123, 54, 3, 24, 324, 2345, 342 }; for (int i = 0; i < arr.length; i++) {// 前者循环次数 for (int j = 0; j < arr.length; j++) {// 后者循环次数 if (arr[i] > arr[j]) {// 如果i>j就是ture,【1】>【2】 int change = arr[i];// 赋值给change,告诉change,i多大 arr[i] = arr[j];// arr[i]赋值给arr[i],换位置 arr[j] = change;// arr[j]赋值给change,进行下一轮比较 } count++; } } for (int j2 = 0; j2 < arr.length; j2++) { System.out.print(arr[j2] + ","); } System.out.println("\n循环次数:" + count);// 100次循环 } }
package Action; public class demos { public static void main(String[] args) { int count = 0; int[] arr = { 9, 12, 31, 123, 54, 3, 24, 324, 2345, 342 }; for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) {// 循环次数递减 if (arr[j] < arr[j + 1]) {// 从大到小排列 int change = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = change;// 值交换 } count++; } } for (int j2 = 0; j2 < arr.length; j2++) { System.out.print(arr[j2] + ","); } System.out.println("\n循环次数:" + count);// 45次循环 } }
int nums[] = {1,2,3,4,5,6}; for(int num : nums) { System.out.println(num); }
二维数组的创建同样有两种方式
方式一:
使用new 类型[][]数组名= new 类型[行数][列数];
String [][]str = new String[5][5];
方式二:
声明数组并且赋初始值
int [][] array = {{23,45,45},{12,11,10},{23,12,56}};
计算二维整数数组两条对角线的值的总和。
int[][] x1 = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, };
int[][] arrays = { { 1, 2, 3, 4, 5, 6, 7, 8, 9 }, { 1, 2, 3, 4, 5, 6}, { 1, 2, 3, 4, 5, 6, 7 }, { 1, 2, 3, 4, 5, 6}, { 1, 2, 3, 4 }, { 1, 2, 3, 4, 5 }, { 1, 2}, { 1, 2, 3, 4, 5, 6, 7, 8 }, { 1 }, };
//交叉数组遍历 for (int i = 0; i < arrays.length; i++) { for (int j = 0; j < arrays[i].length; j++) { System.out.print(arrays[i][j]+","); } System.out.println(); }
数组:一组数据
数组能存储所有数据类型的数据
同一个数组的所有数据必须是同一类型
数组的长度固定,不能改变
数组有一个属性:length
数组对象.length;
数组的长度
分类:一维数组和多维数组
数组的使用
第一步:声明数组变量
数据类型 [] 数组变量名;如:int [] a;
第二步:创建数组对象
new 数据类型[所要创建的数组的长度];
如:new int[5];
第三步:给数组元素赋值
数组变量名[下标]=1;
如:int[] a=new int[5]; a[0]=1;
第四步:访问数组的元素
int max=a[0]; //数组元素的使用,作为数据,给其他变量赋值
System.out.println(a[0]);//把数组元素保存的数据打印输出