java canvas数组_java数组

数组

数组是相同类型数据的有序集合.

数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。

其中,每一个数据称作一个数组元素,每个数组元素可以通过一个下标来访问它们.

数组的声明和创建

首先必须声明数组变量,才能在程序中使用数组。下面是声明数组变量的语法:

5d286ce8bc52eea90bb082f5986ad75f.png

Java中使用new字符创建数组:

f6d0ae0073c4864e4899a222c566a23e.png

数组的元素是通过索引访问的,数组索引从О开始。获取数组长度:array.length

练习

//变量类型 变量名字 = 变量的值

int[] nums;//声明数组

nums = new int[4];//创建数组 数组中可以存放多少个数

nums[0] = 2;//索引从0开始

nums[1] = 3;

nums[2] = 4;

nums[3] = 6;

System.out.println(nums[3]);//输出索引数为3的数字

int sum =0;

for (int i = 0; i < nums.length; i++) {

sum = sum + nums[i];

}

System.out.println("和为:"+sum);

}

内存分析

变量的类型存放在栈中

new的对象储存在堆中

45d593238da9f140e8d6ac63947039b4.png

三种初始化

//静态初始化 创建+赋值

int[] a = {1,2,3,4,5,6,7,8,9};

//同上int[] ab = new int[]{1};

System.out.println(a[0]);

//动态初始化

int[] aa = new int[6];

aa[0] = 10;

System.out.println(aa[1]);

//数组的默认初始化

数组的某一个索引没有被赋值,则默认初始化为0

小结:

数组的四个基本特点:

其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。

其元素必须是相同类型,不允许出现混合类型。

数组中的元素可以是任何数据类型,包括基本类型和引用类型。

数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的。

数组边界

数组下标取到规定数组长度以外

数组下标越界异常: javalang.ArrayIndexOutOfBoundsException

小结:

数组是相同数据类型(数据类型可以为任意类型)的有序集合

数组也是对象。数组元素相当于对象的成员变量

数组长度的确定的,不可变的。如果越界,则报: ArraylndexOutofBounds

数组的使用

普通的For循环

For-Each循环

数组作方法入参

数组作返回值

基本数组

//打印全部数组元素

int[] numa = {10,20,30,40,50,60};

for (int i = 0; i < numa.length; i++) {

System.out.println(numa[i]);

}

//计算总和

int sum =0;

for (int i = 0; i < numa.length; i++) {

sum+=numa[i];

}

System.out.println("和为"+sum);

//查找最大元素

int a = numa[0];

for (int i = 0; i < numa.length; i++) {

if (a

a=numa[i];

}

}

System.out.println(a);

数组增强

int[] arrays = {1, 2, 3, 4, 5,6};

// for (int i : array) {//for (循环变量类型 循环变量名称 : 要被遍历的对象) 循环体

// System.out.println(i);

// }

// printarray(arrays);

int[] reserve = reserve(arrays);//调用reserve方法,并将arrays数组中的数字保存在reserve数组中

printarray(reserve);//打印reserve数组

}

//打印数组元素

public static void printarray(int[] arrays){

for (int i = 0; i < arrays.length; i++) {

System.out.print(arrays[0]+" ");

}

}

//反转数组

public static int[] reserve(int[] arrays){

int[] result = new int[arrays.length];

for (int i = 0,j =result.length-1; i < arrays.length;j--,i++) {

result[j] = arrays[i];

}

return result;

}

二维数组

基本形式:int[][] a =new int[2][5];

//二维数组,n行,两列

int[][] a = new int[][]{{1,1},{2,3}};

System.out.println(a[0][0]);//第一行第一列的数字

System.out.println(a[0][1]);//第一行第二列的数字

System.out.println(a[1][0]);//第二行第一列的数字

System.out.println(a[1][1]);//第二行第二列的数字

printarray(a[0]);//第一行全部的数字

//多维数组

int[][][][][][] b =new int[][][][][][]{};//最多可以建多少个?

}

//打印数组元素

public static void printarray(int[] arrays){

for (int i = 0; i < arrays.length; i++) {

System.out.print(arrays[0]+" ");

}

}

Arrays类

public static void main(String[] args) {

int[] a = {1,54545,8,63,445,9,6};

System.out.println(a);

//打印数组元素 Arrays.toString()

System.out.println(Arrays.toString(a));

printArrays(a);

Arrays.sort(a);//升序

printArrays(a);

//填充数组

Arrays.fill(a,2,5,3);

printArrays(a);

}

//Arrays.toString() 方法

public static void printArrays(int[] b){

for (int i = 0; i < b.length; i++) {

if (i==0){

System.out.print("[");

}

if (i==b.length-1){

System.out.print(b[i]+"]");

}else {

System.out.print(b[i]+","+" ");

}

}

}

Arrays详解https://www.cnblogs.com/wei-jing/p/10540192.html

冒泡排序

1.原理:比较两个相邻的元素,将值大的元素交换到右边

2.思路:依次比较相邻的两个数,将比较小的数放在前面,比较大的数放在后面。

b5012ea8ab499e9fe1758726a550033d.png

public static void main(String[] args) {

int[] array ={1,5,454,4,648,1,454,7,1};

int[] sort = sort(array);

System.out.println(Arrays.toString(sort));

}

public static int[] sort(int[] b){

//临时变量

int temp =0;

for (int i = 0; i < b.length-1; i++) {

boolean flag =false;//如果改数组已经排序,则跳出循环.减少没有意义的比较

//内层循环,比较两个数,如果第一个数比第二个数大则交换位置

for (int j = 0; j < b.length-1-i; j++) {

if (b[j+1]

temp= b[j];

b[j]=b[j+1];

b[j+1] =temp;

flag = true;

}

}

if (flag ==false){

break;

}

}

return b;

}

算法复杂度https://www.iteye.com/blog/univasity-1164707

稀疏数组

稀疏数组可以看做是普通数组的压缩,但是这里说的普通数组是值无效数据量远大于有效数据量的数组

例如:

bc1b15cb4227bd8be88e7afa1b3fb738.png

public static void main(String[] args) {

//1.创建一个二维数组 11*11 0:没有棋子 1:黑棋 2.白棋

int[][] array1 = new int[11][11];

array1[1][2] = 1;

array1[2][3] = 2;

//输出原始数组

System.out.println("输出原始数组:");

for (int[] ints : array1) {

for (int anInt : ints) {

System.out.print(anInt+"\t");

}

System.out.println();

}

System.out.println("====================");

//转换为稀疏数组保存

//1.获取有效值的个数

int sum =0;

for (int i = 0; i < 11; i++) {

for (int j = 0; j < 11; j++) {

if (array1[i][j]!=0){

sum++;

}

}

}

System.out.println("有效值的个数:"+sum);

//2.创建一个稀疏数组的数组

int[][] array2 = new int[sum+1][3];

array2[0][0] = 11;

array2[0][1] = 11;

array2[0][2] = sum;

//遍历二维数组,将非零的值,存放到稀疏数组中

int count =0;

for (int i = 0; i < array1.length; i++) {

for (int j = 0; j < array1[i].length; j++) {

if (array1[i][j]!=0){

count++;

array2[count][0] =i;

array2[count][1] =j;

array2[count][2] =array1[i][j];

}

}

}

//输出稀疏数组

System.out.println("稀疏数组:");

for (int i = 0; i

System.out.println(array2[i][0]+"\t"

+array2[i][1]+"\t"

+array2[i][2]+"\t");

}

System.out.println("====================");

System.out.println("还原:");

//1.读取稀疏数组

int[][] array3 = new int[array2[0][0]][array2[0][1]];

//2.给其中的元素还原它的值

for (int i = 1; i

array3[array2[i][0]][array2[i][1]] = array2[i][2];

}

//3.打印

System.out.println("输出还原数组:");

for (int[] ints : array1) {

for (int anInt : ints) {

System.out.print(anInt+"\t");

}

System.out.println();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值