Java学习笔记4

本文详细介绍了Java中的数组声明、创建、初始化、长度获取及打印方法。还讲解了Arrays类的常用方法,如填充、排序、比较和二分查找。此外,探讨了冒泡排序算法,并展示了稀疏数组的概念及其转换。内容涵盖了数组的基本操作和优化策略。
摘要由CSDN通过智能技术生成

数组

数组声明创建

数组的声明

dataType[] arrayRefVar;
//int [] array1;

数组的创建

再数组声明之后就可以对数组进行创建。

arrayRefVar = new dataType[arraySize];
//array1 = new int[10];

//或者可以声明、创建一步到位
double[] array2 = new double[10];
int[] array3 = {1,2,3,4,5};

//获取数组长度
int length = array2.length;

打印数组

//方法1
int[] array = {1,2,3,4,5};
for (int value : array) {
    System.out.print(value + " ");
}
System.out.println("");
System.out.println("=========");
//方法2
for (int i = 0; i < array.length; i++) {
    System.out.print(array[i] + " ");
}

/*
out:
1 2 3 4 5 
=========
1 2 3 4 5
*/

内存分析

  • 堆中存放new的对象数组
  • 可以被所有的线程共享,不会被别的对象引用。

  • 存放基本变量类型(包含该变量类型的具体值);
  • 引用对象的变量(会存放这个引用在堆里面的具体地址)。

方法区

  • 可以被所有的线程共享;
  • 包含所有的classstatic变量。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KeEuAsYx-1626798955519)(C:\Users\在飞电脑\Desktop\Screenshot_20210720_140605_tv.danmaku.bili.jpg)]

Arrays类

Arrays类中的方法都是static修饰的静态方法,在使用时可以直接使用类名进行调用。

常用方法

//import java.util.Arrays;

//给数组幅值Arrays.fill()
//array1 = {1, 2, 3, 4, 5}
Arrays.fill(array1, 1, 3, 10);
//out:	1 10 10 4 5

//对数组排序
//array2 = {5, 4, 3, 2, 1}
Arrays.sort(array);
//out:	1 2 3 4 5

//比较数组
//array3 = {5, 4, 3, 2, 1}
//array4 = {5, 4, 3, 2, 0}
Arrays.equals(array3, array4);
//out:	false

//对排序好的数组进行二分查找法操作
//array1 = {1, 2, 3, 4, 5}
Arrays.binarySearch(array1, 3);
//out:	2

冒泡排序

从后往前,每两个数进行比较,每一次比较后把较大数放在后面,较小数放在前面。

public static int[] sort(int[] array){
    int temp = 0;
    //flag标识位减少没有意义的循环
    boolean flag = false;
    for (int i = 0; i < array.length - 1; i++) {
        for (int j = 0; j < array.length-i-1; j++) {
            if (array[j + 1] < array[j]) {
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
                flag = true;
            }
        }
        if(flag == false){
            //当发现循环后没有一次交换,则已经有序,不必执行后续比较,直接跳出循环
            break;
        }
    }
    return array;
}

稀疏数组

当一个数组中大部分元素为0或者为同一值时,可以使用稀疏数组来保存该数组。

//生成一个稀疏的数组
int[][] array1 = new int[10][10];
array1[1][2] = 1;
array1[3][4] = 2;
array1[5][6] = 3;
System.out.println("生成一个稀疏的数组:");
for (int[] ar1 : array1) {
    for (int ar2 : ar1) {
        System.out.print(ar2 + " ");
    }
    System.out.println("");
}
System.out.println("=====================");

//计算该稀疏的数组中非0数的个数
int sum = 0;
for (int i = 0; i < array1.length; i++) {
    for (int j = 0; j < array1[i].length; j++) {
        if(array1[i][j] != 0){
            sum++;
        }
    }
}
System.out.println("该稀疏的数组中非0数的个数为:"+ sum);
System.out.println("=====================");

//定义稀疏数组
int[][] array2 = new int[sum+1][3];
array2[0][0] = array1.length;
array2[0][1] = array1[0].length;
array2[0][2] = sum;

//生成稀疏数组
int count = 0;
for (int i = 1; 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[] arr1 : array2) {
    for (int arr2 : arr1) {
        System.out.print(arr2 +" ");
    }
    System.out.println("");
}
/*
out:
生成一个稀疏的数组:
0 0 0 0 0 0 0 0 0 0 
0 0 1 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 2 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 3 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
=====================
该稀疏的数组中非0数的个数为:3
=====================
稀疏数组为:
10 10 3 
1 2 1 
3 4 2 
5 6 3
*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值