Java数组

本文详细介绍了Java中数组的概念、声明与创建、初始化、内存分析、遍历、二维数组的处理以及Arrays类的使用。内容包括静态和动态初始化数组、冒泡排序算法以及稀疏数组的压缩和还原。此外,还探讨了数组在内存中的分配,如堆、栈和方法区的作用。
摘要由CSDN通过智能技术生成

数组是相同类型数据的有序集合。每个数据元素可以通过下表来访问。

1. 数组的声明和创建

两种定义方式都可以: (首选!)类型[] 数组名字; 类型 数组名字[];
数据组创建:
int[] nums = new int[10];
表示在内存中开辟10个空间存放数据。
数组赋值:如果没有赋值有默认值
nums[0] = 1;

数组的特点:

  1. 数组的长度是固定的,一旦创建,大小是不可以改变的
  2. 数据中的元素数据类型必须是一致的
  3. 数组对象本身是在堆中

2. 初始化数组和内存分析

内存分析

Java内存:
1. 堆:
存放new的对象和数组,可以被所有线程共享,不会存放别的对象引用
2. 栈:
存放基本变量类型(包含基本类型的具体数值),引用对象的变量(会存放这个引用在堆里面的具体地址)
3. 方法区:
可以被所有线程共享,包含所有的class和static变量

数组的内存分析

在这里插入图片描述

数组的初始化

静态初始化: int[] a = {1,2,3};
动态初始化: int[] a = new int[3]; a[0]=1;
默认初始化:默认值

3. 数组的使用

遍历数组: for.i arr.for 使用普通for循环和增强型for循环
增强for循环是取不到下标的

数组作为入参:略
数组作为返回值:略

4. 二维数组

二维数组示意图
定义二维数组:
int[][] array = new int[2][2];
复制二维数组:
array[0][0] = 3;
int[][] arrau = {{1,2},{2,3}};
获取数组的长度:
array.length 获取函数
array[i].length 获取列数

5. Arrays类

Arrays类是数组的工具类java.util.Arrays
常用功能:
给数组赋值:Arrays.fill(array,fromIndex, toIndex, value),定义成统一的值
对数组排序:Arrays.sort(array)
比较数组:equals方法
查找数组元素:binarySearch对排序好的数组进行二分查找
打印数组元素:Arrays.toString(array)

冒泡排序

  1. 比较数组中,两个相邻的元素,如果第一个数比第二个数大,交换位置
  2. 每次比较,都会产生一个最大或最小的数字
  3. 下一轮可以少进行一次排序
  4. 依次循环,直到结束
public static int[] sort(int[] array){
	//	从大到小
	int temp =0;
	for(int i = 0; i < array.length - 1; i++){
		for (int j = 0; j < array.length - 1 - i; j++){
			if(array[j+1] > array[j]){
				//调换数值
				temp = array[j];
				array[j] = array[j+1];
				array[j+1] = temp; 
			}
		}
	}
	return array;
}

6. 稀疏数组

当一个数组大部分元素为0或者为同一个值时,可以使用稀疏数组来保存数组。
稀疏数组的处理方式:
记录数组一共有几行几列,有多少个不同值
把具有不同值的元素和行列及值记录在一个小规模的数组中,从而缩小程序的规模
在这里插入图片描述

/**
压缩数组
*/
//计算 有效值的个数,如上图有效值个数为8个,则稀疏数组一共有9行
int sum = 0;
for (int i = 0; i < array.length -1; i++){
	for (int j = 0; j< array[i].length - 1; j++){
		if(array[i][j] != 0){
			sum ++;
		}
	}
}
//array2[0][0] 原始数组有6行,array2[0][1]原始数组有7列, array2[0][2]原始数组有效值有8个
array2[0][0]=6;
array2[0][1]=7;
array2[0][2]=8;
//遍历二维数组,将非零的值存到稀疏数组中
int count =0;
for (int i = 0; i < array.length -1; i++){
	for (int j = 0; j< array[i].length - 1; j++){
		if(array[i][j] != 0){
			count++;
			array2[count][0]= i;
			array2[count][1]= j;
			array2[count][2]= array[i][j];
		}
	}
}
/**
还原成原数组略
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值