数组
数组概述
1.数组的定义
- 数组就是相同类型数据的有序集合
- 每个数组相当于一个数组的元素,每个元素可以用下标访问到
2.数组的四个基本特特点
1.其长度是确定的,数组一旦被创建大小就不可以改变
2.数组中的元素类型一定要符合声明数组的数据类型,不能够出现混合类型
3.数组中的元素可以是任何数据类型,引用类型和基本类型
4.数组变量属于引用类型,数组本身是一个对象,每个元素相当于该对象的成员变量,java的对象存放在堆里,所以无论存放任何类型数据,数组对象本身还是存放堆中
数组声明创建
1.声明数组变量语法
2.创建new对象创建数组
3.数组元素的访问
- 通过索引来访问,索引从0开始,也就是arrayRefVar[0]是数组的第一个元素,以此类推
4.数组长度的获取
- 数组对象名.length
内存简单分析
- java内存分析
数组使用
1.数组的三种初始化
1.静态初始化
创建+赋值
2.动态初始化
包含默认初始化
3.
String[] test3 = new String[]{"数组0","数组1","数组2","...."};
- 数组是引用类型,它的元素相当于类的实例变量(成员变量),所以数组一旦创建,每个元素就会按照实例变量被隐式初始化
2.数组边界
- 下标的合法区域在[0-length-1],越界会报ArrayIndexOutofBoundsException
3.数组使用实例
- 遍历全部数组元素
- 求数组元素之和
- 找出数组元素中最大的值
- 通过数组传参,返回值是数组,通过增强for循环实现反转效果
多维数组
- 多维数组可以看成数组的数组,比如二维数组的每个元素都是一个一维数组
- 二维数组
可以解析为一个2行5列的数组
Arrays类
- 是数组的一个工具类Java.util.Arrays
- 为什么要使用这工具类,因为数组本身是没有一些方法可以调用的,要实现一些排序,搜索等功能需要自己定义方法来写,但是工具类Arrays类已经封装好了对数组的操作的功能方法,从而可以简单的对数组对象进行基本操作
- Arrays类中的方法都是static修饰的静态方法,使用的时候可以用类名直接调用,而不用使用对象来调用
- Array类使用
如果是二维数组使用toString方法只会输出对象的hashcode
冒泡排序 O(n2)
-两两比较,第一个比第二个元素大则交换位置,直到从小到大排序完成
- 优化
如果已经在某次遍历下已经从小到大排序了,就不需要继续排序,所以需要加入一个boolean值的变量来优化
稀疏数组
- 当一个数组中大部分元素为0,或者同一值的数组,可以使用稀疏数组进行压缩保存该数组
左边是原始数据 右边是稀疏数组
-代码实现
public class ArrayDemo6 {
public static void main(String[] args) {
//1.创建一个二维数组
int[][] arr=new int[11][11];
arr[1][2]=1;
arr[2][3]=2;
for (int[] ints : arr) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("===============");
//2.获取有效值个数
int sum=0;
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
if (arr[i][j]!=0){
sum++;
}
}
}
System.out.println("有效值的个数:"+sum);
System.out.println("===========");
//3.创建一个稀疏数组
int[][] array=new int[sum+1][3];
array[0][0]=11;
array[0][1]=11;
array[0][2]=sum;
//4.遍历二位数组,把非零的值,放入稀疏数组中
int count=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j <arr[i].length ; j++) {
if (arr[i][j]!=0){
count++;
array[count][0]=i;
array[count][1]=j;
array[count][2]=arr[i][j];
}
}
}
//5.输出稀疏数组
System.out.println("===========");
for (int[] ints : array) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
System.out.println("==========");
//6.还原稀疏数组
int[][] renew=new int[array[0][0]][array[0][1]];
/* renew[1][2]=1;
renew[2][3]=2;*/
for (int i = 1; i <array.length ; i++) {
renew[array[i][0]][array[i][1]]=array[i][2];
}
for (int[] ints : renew) {
for (int anInt : ints) {
System.out.print(anInt+"\t");
}
System.out.println();
}
}
}