数组是一种容器,如同声明的一种变量一样,数组保存一组相同数据类型的数据,而变量只能保存单个数据.
声明数组的格式为: 数据类型[] 数组名 = 初值;--(注意:这里的数据类型指的是数组中保存的数据的类型)
//int[] array = new int[数组的元素个数(长度)];
public static void main(String[] args){
//声明一个整形数组(可以保存5个int值)
//注意:数组的长度一旦确定,就不能更改了
int[] array = new int[5]; //数组的长度为5 array.length = 5;
//数组通过使用下标存取数据;下边从0开始
array[0] = 10;
}
int[] array = new int[]{1,3,5,11};
次方式即给了长度又给了元素
int[] array = {1,2,3,4};
public static void main(String[] args){
int[] array = new int[5];
array[3] = 10;
array = null;//指向一个空的区域
}
四 数组的遍历(打印数组中所有的元素)
//1.将数组每个元素按顺序打印出来
for(int i = 0; i < array.length; i++){
System.out.print(array[i] + " ");
}
//2.利用系统方法,将数组转化为字符串输出
System.out.pring(Arrays.toSring(array));
public static void chang(int a, int b){
int c = a;
a = b;
b = c;
}
public static void main(String[] args){
int a = 10;
int b = 15;
chang(a , b);
System.out.println("a = " + a);
System.out.println("b = " + b);
}
虽然在封装函数中将a和b的数据互换了一下,然而在打印的结果中a,b的值并没有变,这是因为只是在change函数内部中a,b的值互换,并没有在main函数中进行换位
此时,需要解决这种封装的问题,需要引用栈,堆内存地址的概念
public static void changeArray(int[] array){
for(int i = 0;i < array.length / 2;i++){
int a = array[i];
array[i] = array[array.length - i - 1];
array[array.length - i - 1] = a;
}
}
public static void main(String[] args){
int[] array = {1,2,3};//传递了一个地址
changeArray(array);//对堆中给定地址的数据进行操作
System.out.println(Arrays.toString(array));
}
此时打印的结果为:
因为传递数据在堆内存中的地址后,才会对同一个数据进行操作
1.冒泡排序(其核心思想为:相邻两个数比较换位)
int[] array = new int[]{1,3,5,6,2};
for(int i = 0; i < array.length - 1;i++){
for(int j = 0; j < array.length - 1 - i; j++){
if(array[j] > array[j + 1]){
int a = array[j];
array[j] = array[j + 1];
array[j + 1] = a;
}
}
}
System.out.println(Arrays.toString(array));
其打印结果为: [1,2,3,5,6];
2.选择排序(其核心思想为:选择一个数和其他的所有的数进行比较交换)
int[] array = {1,3,5,8,2};
for(int i = 0; i < array.length - 1; i++){
for(int j = i + 1; j < array.length; j++){
if(array[i] > array[j]){
int a = array[i];
array[i] = array[j];
array[j] = a;
}
}
}
其打印结果为:[1,2,3,5,8];
3.折半查找(前提:必须是有序的数组)
int[] arr = new int[] {11,22,33,44,55,66};
int key = 55;
int min = 0;
int max = arr.length - 1;
int mid = (min + max) / 2;
while(arr[mid] != key) {
//判断key 和 中间角标值 来挪动 最小角标或最大角标
if (key > arr[mid]) {
min = mid + 1;
}
if(key < arr[mid]){
max = mid - 1;
}
//每次循环都要有折半的操作
mid = (max + min) / 2;
//数组没有这个数的时候
if (min > max) {
//没有这个数 使用-1表示
mid = -1;
break; //跳出循环
}
}
System.out.println("该值的坐标是:" + mid);
打印结果为:
保存多个相同类型的一维数组
数据类型[][] 数组名 = 初值;
保存多个相同类型的二维数组
数据类型[][][] 数组名 = 初值;-----数组的声明,几维数组就有几个[]
public static void main(String[] args) {
//声明一个二维数组
//这个二维数组中 有两个一维数组
//每个一维数组中有三个元素
int[][] array = new int[2][3];
// aray.length 表示 有几个一维数组
System.out.println(array.length); // array.length = 2;
int[][] arr = new int[][]{
{2,2,3},
{2,3,5}
};
//遍历
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
其打印结果为: