Java知识(数组)

数组

定义:存储一批同种类型数据的内存区域。

两种定义方法:

1.静态初始化数组:定义数组的时候就直接给数组赋值。

//数据类型[] 数组名 = new 数组类型[]{元素1,元素2……};
int[] ages = new int[]{19,26,33,25};
String[] names = new String[]{张三,李四,王五};

完整格式在书写的时候比较麻烦,但是Java还提供了一种简化格式方便我们使用。

//数据类型[] 数组名 = {元素1,元素2……};
int[] ages = {19,26,33,25};
String[] names = {张三,李四,王五};

2.动态初始化数组:定义数组的时候只确定元素的类型和数组的长度,之后再存入数据

//数据类型[] 数组名 = new 数组类型[长度];
int[] ages = new int[5];

注意事项:

1.元素默认值规则:

数据类型明细默认值
基本类型byte,short,char,int,long0
基本类型float,double0.0
基本类型booleanfalse
引用类型类,接口,数组,Stringnull
2.两种定义方法不能混用!!!

数组的基本原理

数组的名称指向的是一个地址,这个地址指向的是存储数据的地方,如图.
image.png

数组的遍历,排序

数组的遍历

定义:就是一个一个数据的访问.
为什么要用到遍历:在之后的求和,搜索,排序等等地方都会用到遍历

int[] num = new int[]{11,22,33,44,55};
for (int i = 0; i < num.length; i++) {
    System.out.print(num[i]);
}

这样子就可以实现数组的遍历.

数组的排序

定义:在数组遍历的基础上,通过一系列的比较方式,是原本散乱无章的数据按某种顺序排列好.
种类:插入排序,冒泡排序,希尔排序,堆排序等等(优先学习技术,这部分算法就不展开了,只讲讲冒泡排序)

冒泡排序

冒泡排序:重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
其主要思想是每次从数组中找出最大值放在数组的后面去
关键步骤分析:
1.确定总共需要做几轮:数组的长度-1
2.每轮比较的次数:(以数组长度为4举例)
image.png
代码实现:

for (int i = 0; i < num.length - 1; i++) {
        for (int j = 0; j < num.length - i - 1; j++) {
            if (num[j] > num[j + 1]) {
                int temp = num[j];
                num[j] = num[j + 1];
                num[j + 1] = temp;
            }
        }
}

数组的内存图

Java内存分配
Java为了执行程序,会将内存区分为五个部分(栈,堆,方法区,本地方法栈,寄存器),每个部分负责不同的内容,便于管理维护.
image.png
接下来,以数组为例来看看内存分配

public static void main(String[] args) {
        int a = 2;
        System.out.println(a);
        int[] arr =new int[]{11,22,33};
        System.out.println(arr);
        arr[0]=44;
        arr[1]=55;
        arr[2]=66;
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }

第一步,把类编译成class文件,加载到方法区里;
第二步,将类中的main方法提取到栈内存里,在栈内存里运行代码:为a变量和arr开辟一个空间,分别放置数据和地址,将数字2放入;
第三步,由于等号从右往左执行,所以,会先在堆内存里开辟一个空间,放置数组的相关数据,然后把数组的首地址赋值给arr;
第四步:通过数组的访问,将内容更改后输出.

数组使用常见问题

1.数组越界的错误提示:ArrayIndexOutOfBoundsException,程序运行在此处便会自动退出程序运行.
2.数组变量中没有存储数据的地址,而是null,在访问数组信息的时候会出现NullPointerException的错误提示

补充:Debug工具的使用

这是IDEA自带的断点调试(排错)工具,可以控制代码从断电开始一行一行执行,然后详细查看程序执行状况.
基本使用步骤:1.在需要控制的代码行左侧点击一下,形成断点;
image.png
2.选择使用Debug方式启动程序,启动后程序会在断点处暂停
image.png
3.控制代码一行行往下执行:点击Step Over
Debug工具的使用,可以快速找到错误所在,提高代码查错效率.

每日一练:

需求:某公司开发部5名开发人员,要进行项目进度汇报演讲,现采取随机排名后进行汇报,请先输入5名员工的工号,然后展示出一组随机的排名顺序

public class ArrayDemo {
    //实现随机排名
    public static void main(String[] args) {
       //1.录入五名程序员的编号
        int[] num =new int[5];
        Scanner sc = new Scanner(System.in);
        for (int i = 0; i < num.length; i++) {
            System.out.print("请输入第"+(i+1)+"个程序员的编号:");
            num[i] = sc.nextInt();
        }
        //2.生成一个随机数
        Random r =new Random();
        for (int i = 0; i < num.length; i++){
            int j = r.nextInt(num.length);
            while(true){
                if(i!=j) break;
                else j = r.nextInt(num.length);
            }
        int swap=num[i];
        num[i]=num[j];
        num[j]=swap;
        }
        //3.输出排序后的顺序
        System.out.print("最终顺序是");
        for (int i = 0; i < num.length; i++) {
        System.out.print(num[i]+"  ");
        }
    }
}

最终结果:
image.png

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值