【java】一维数组

一维数组内存分析

Java虚拟机的内存划分

为了提高运行效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
在这里插入图片描述

java中的内存结构是如何划分的?(主要关心JVM的运行时内存环境)
将内存区域划分为5个部分,程序计数器、虚拟机栈、本地方法栈、堆、方法区
与目前数组相关的内存结构: int [] arr = new int[]{1,2,3}
1、虚拟机栈:用于存放方法中声明的变量.比如:arr
2、堆:用于存放数组的实体(即数组中的所有元素).比如:1,2,3

一维数组内存解析

在这里插入图片描述
在这里插入图片描述

一维数组知识点

package ArrayTest;

/**
 * 1、数组的概念:是多个相同类型数据按照一定排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
 * 2、数组的特点:①数组中的元素在内存中依次紧密排列的,有序的
 *              ② 属于引用数据类型变量;数组的元素可以是基本数据类型,也可以是引用数据类型
 *              ③数组一旦初始化完成,数组的长度就确定了;并且数组长度不能更改
 *              ④创建数组队形会在内存中开辟一整块"连续的空间"。占据的空间大小,取决于数组的长度和数组中元素的类型。
 * 3、数组的分类:
 *       ①:按照元素的类型:基本数据类型的数组、引用数据类型的数组
 *       ②:按照数组的维度来分:一维数组、二维数组。。。
 * 4、一维数组的使用:
 *       ①数组的声明和初始化
 *       ②调用数组的指定元素
 *       ③数组的属性:length,表示数组的长度
 *       ④数组的遍历
 *       ⑤数组元素的默认初始化值
 *           1)浮点型数组元素的默认初始化值
 *           2)字符型数组元素的默认初始化值
 *           3)字符型数组元素的默认初始化值
 *           4)boolean型数组元素的默认初始化值
 *           5)引用数据类型数组元素的默认初始化值
 *       ⑥一维数组的内存解析
 */

public class OneArrayTest {
    public static void main(String[] args) {

        //1、数组的声明和初始化
        // 声明数组
        double[] prices;
        // 静态初始化:数组变量的赋值与数组元素的赋值操作同时进行
        prices = new double[]{12.34,13.11};

//        String[] names = new String[]{"拌海蜇","龙须菜"};
        // 动态初始化:数组变量的赋值与数组元素的赋值操作分开进行
        String[] foods = new String[4];

        //2、数组元素的调用
        //通过角标的方式,获取数组元素
        //角标的范围从0开始,到数组长度-1结束
//        System.out.println(prices[0]);

        foods[0]="拌海蜇";
        foods[1]="龙须菜";
        foods[2]="炝冬瓜";
        foods[3]="玉兰花";
//        System.out.println(foods[2]);

        //3、数组的长度:用来描述数组容器中容量的大小
//        System.out.println(prices.length);
//        System.out.println(foods.length);

        //4、数组的遍历
        for(int i=0;i<prices.length;i++){
            System.out.println(prices[i]);
        }

//        //5、数组元素的默认初始化值
//        int arr1 [] = new int[3];
//        System.out.println(arr1[0]);
    }

}

package ArrayTest;

public class OneArrayTest1 {
    public static void main(String[] args) {
        //5.数组元素的默认初始化值
        //整型数组元素初始化值:0
        int [] arr1 = new int[4];
        System.out.println(arr1[0]);

        int[] arr2 = new int[4];
        for(int i=0;i<arr2.length;i++){
            System.out.println(arr2[i]);
        }

        //浮点型数组元素的默认初始化值:0.0
        float [] float1 = new float[4];
        System.out.println(float1[0]);

        //字符型数组元素的默认初始化值:0
        char [] char1 = new char[4];
        System.out.println(char1[0]);

        if(char1[0]==0){
            System.out.println("111");
        }else if(char1[0]=='0'){
            System.out.println("222");
        }else if(char1[0]=='\u0000'){
            System.out.println("333");

        }

        //boolean型数组元素的默认初始化值:false
        boolean [] boolean1 = new boolean[4];
        System.out.println(boolean1[1]);

        //引用数据类型数组元素默认初始化值:null
        String [] strings = new String[4];
        for(int i=0;i<strings.length;i++){
            System.out.println(strings[i]);
        }

        //6.数组的内存解析
        int a1[] = new int[]{1,2,3,4};
        int [] a2 = a1;
        a2[1]=10;
        System.out.println(a1[1]); //10
    }
}

一维数组课后练习

package ArrayTest;

import java.util.Arrays;
import java.util.Scanner;

public class OneArrayExer {

    public static void main(String[] args) {
        /**
         * 案例:“破解”房东电话号码
         */
        int arr[] = new int[]{8,2,1,0,3};
        int index[] = new int[]{2,0,3,2,4,0,1,3,2,3,3};

        String tell = "";

        for(int i=0;i<index.length;i++){
            int value = index[i];//2 3

            tell+=arr[value];//2

        }
        System.out.println(tell);


        /**
         * 案例:输出英文星期几
         * 用一个数组,保存星期一到星期天的7个英语单词,从键盘输入1-7,显示对应的单词
         * {"Monday","Tuesday","Wednesday","Thursday","Friday""Saturday","Sunday"}
         */
        String [] days = new String[]{"Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"};
        Scanner scanner = new Scanner(System.in);
        int number = scanner.nextInt();

        if(number<1 || number >7){
            System.out.println("您输入的数据有误。");
        }else
            System.out.println(days[number-1]);

        /**
         * 案例:学生考试等级划分
         * 从键盘读入学生成绩,找出最高分,并输出学生成绩等级
         * 成绩>=最高分-10  等级为‘A'
         * 成绩>=最高分-20  等级为‘B'
         * 成绩>=最高分-30  等级为‘C'
         * 其余 等级为‘D'
         *提示:先读入学生人数,根据人数创建int数组,存放学生成绩
         */

        System.out.println("请输入学生人数");
        int num = scanner.nextInt();
        System.out.print("请输入"+num+"个学生成绩");
        double [] grade =new double[num];
        for(int i=0;i<grade.length;i++){
            int grades = scanner.nextInt();
            grade[i]=grades;
        }

        double max_num = max(grade);
        System.out.println("最高分为:"+max_num);

        for(int j=0;j<grade.length;j++){
            if(grade[j]>=max_num-10){
                System.out.println("等级为A");

            }else if(grade[j]>=max_num-20){
                System.out.println("等级为B");
            }else if(grade[j]>=max_num-30){
                System.out.println("等级为C");
            }
            else{
                System.out.println("等级为D");
            }
        }
    }

    private static double max(double[] grade) {
        Arrays.sort(grade);
        return grade[grade.length-1];
    }


}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值