一、数组的基本概念
1.1 数组的创建及初始化
T[] 数组名 = new T[N];
T:表示数组中存放元素的类型
T[]:表示数组的类型
N:表示数组的长度
public static void main(String[] args) {
//. 静态初始化
int[] score = {60,81,93,17};
int[] score3 = new int[]{30,40,50,60};
//动态初始化
int[] score2 = new int[10];
}
- 动态初始化:在创建数组时,直接指定数组中元素的个数.
- 静态初始化:在创建数组时不直接指定数据元素个数,而直接将具体的数据内容进行指定.
1.2数组的访问方式
数组在内存中是一段连续的空间,下标都是从0开始的,数组可以通过下标访问其任意位置的元素。
public static void main(String[] args) {
int[] score = {60,80,93,17};
//下标访问
System.out.println(score[0]);
System.out.println(score[1]);
//fori
for (int i = 0; i < score.length; i++) {
System.out.println(score[i]);
}
//foreach
for (int n:score) {
System.out.println(n);
}
}
【注意事项】
1. 数组是一段连续的内存空间,可以通过下标来快速访问数组中任意位置的元素.
2. 下标从0开始,介于[0, N)之间,N为元素个数,不能越界,否则会报出异常.
二、基本类型变量与引用类型变量的区别
基本数据类型创建的变量,称为基本变量,该变量空间中直接存放的是其所对应的值;
引用数据类型创建的变量,一般称为对象的引用,其空间中存储的是对象所在空间的地址.
!
public static void func() {
int a = 10;
int b = 20;
int[] arr = new int[]{1,2,3};
}
2.2认识null
null 在 Java 中表示 “空引用” , 也就是一个不指向对象的引用.
三、数组的应用场景
3.1 数组排序(冒泡排序)
给定一个数组, 让数组升序 (降序) 排序.
算法思路 :
1. 将数组中相邻元素从前往后依次进行比较,如果前一个元素比后一个元素大,则交换,一趟下来后最大元素就 在数组的末尾 .
2. 依次从上上述过程,直到数组中所有的元素都排列好.
public static void main10(String[] args) {
int[] arr = {9,2,5,7};
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[i]<arr[j]) {
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
3.2 二分查找
针对有序数组, 可以使用更高效的二分查找.
算法思路 :
先取中间位置的元素, 然后使用要查找的元素与数组中间元素进行比较:
如果相等,就返回该元素的下标 ;
如果小于,以类似方式到数组左侧查找 ;
如果大于,以类似方式到数组右侧查找.
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8,9,0};
int k = 7;
int left = 0;
int right = arr.length - 1;
while (left <= right) {
int mid = (left+right)/2;
if(arr[mid] == k) {
System.out.println(mid);
break;
}else if(arr[mid] < k) {
left = mid + 1;
}else {
right = mid - 1;
}
}
}
结论: 如果要查询的数据较大,二分查找就非常方便,一次砍一刀.
同时也要注意:left<=right,这个经常疏忽,导致查询结果有偏差.
四、二维数组
二维数组本质上也就是一维数组, 只不过每个元素又是一个一维数组.
**4.1基本语法 **
数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
4.1访问方式
public static void main(String[] args) {
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
//System.out.println(arr[0][1]);
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();
}
}
与君功勉:如果说学习有捷径可走,那么它就是勤奋;如果说知识就是力量,那么它就是实践。