day05(数组)

来源:互联网 发布:linux 加载u盘 编辑:程序博客网 时间:2024/06/05 05:17

一.数组概述和定义格式说明

1.为什么要有数组(容器)
  为了存储同种数据类型的多个值
2:数组概念
  数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
  数组既可以存储基本数据类型,也可以存储引用数据类型。
3:数组定义格式
  数据类型[] 数组名 = new 数据类型[数组的长度];
4.输出数组名称和数组元素
  输出数组名:[I@659e0bfd
    ”[“代表一维数组
    ”I”代表int数据类型
    ”@659e0bfd”代表内存地址(哈希码)

二.数组的初始化动态初始化

1.数组的初始化
  就是为数组开辟连续的内存空间,并为每个数组元素赋予值
2.对数组进行初始化
  a:动态初始化只指定长度,由系统给出初始化值
    int[] arr = new int[5];
  b:静态初始化 给出初始化值,由系统决定长度
3.动态初始化的格式
  数据类型[] 数组名 = new 数据类型[数组长度];
4.数组是引用类型的变量
  定义数组相当于定义了一个引用变量(也就是定一个了一个指针),这个引用变量还未指向任何有效的内存

三.Java中的内存分配以及栈和堆的区别

1.栈
  存储局部变量
  存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放在常量池中。)
    由输出引用数据变量名为内存地址可以证明
  栈内存可以理解成线程的私有内存,具体方法执行结束之后,系统自动释放JVM内存资源。
2.堆
  存储new出来的数组或对象
  堆内存中的对象对所有线程可见,可以被所有线程访问。jvm不定时查看堆中的对象,如果没有引用指向这个对象就回收。

3.方法区
4.本地方法区
  和系统相关
5.寄存器
  给CPU使用
  最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.
6.常量池
  存放字符串常量和基本类型常量(public static final)。

四.数组常见的小问题

1.ArrayIndexOutOfBoundsException:数组索引越界异常
    原因:你访问了不存在的索引。
2.NullPointerException:空指针异常
    原因:数组已经不在指向堆内存了。而你还用数组名去访问元素。

五.数组的常见操作

1.数组遍历
2.获取数组中的最大值最小值
3.数组元素反转

public class Temp3 {    public static void main(String[] args) {        int[] arr = new int[]{9,5,6,7,8,34,56};        System.out.print("原数组为:");        for(int i=0;i<arr.length;i++){            System.out.print(arr[i]+" ");        }        int[] revArr = getRever3(arr);        System.out.println();        System.out.print("数组反转后为:");        for(int i=0,len=revArr.length;i<len;i++){            System.out.print(revArr[i]+" ");        }    }    //第一种    public static int[] getRever1(int[] arr){        int temp;        for(int i=0,len=arr.length;i<len/2;i++){            temp = arr[i];            arr[i] = arr[len-1-i];             arr[len-1-i] = temp;        }        return arr;    }    //第二种    public static int[] getRever2(int[] arr){        int temp;        for(int i=0,len=arr.length;i<len/2;i++){            arr[i] = arr[i]^arr[len-1-i];            arr[len-1-i] = arr[i]^arr[len-1-i];            arr[i] = arr[i]^arr[len-1-i];        }        return arr;    }    //第三种    public static int[] getRever3(int[] arr){        int temp;        for(int i=0,len=arr.length;i<len/2;i++){            arr[i] = arr[i]+arr[len-1-i];            arr[len-1-i] = arr[i]-arr[len-1-i];            arr[i] = arr[i]-arr[len-1-i];        }        return arr;    }}

4.查找指定元素第一次在数组中出现的索引

public class Temp13 {    public static void main(String[] args) {        int[] a = new int[]{45,67,25,98,34};        int index = getIndex(a,98);        if(index==-1){            System.out.println("不存在该数");        }else{            System.out.println("存在该数,且下标为:"+index);        }    }    public static int getIndex(int[] a,int num){            for(int i=0;i<a.length;i++){            if(num==a[i]){                return i;            }        }        return -1;    }}

六.二维数组

1.二维数组的格式
  int[][] arr = new int[3][2];
  int[][] arr = new int[3][];
  int[][] arr = {{1,2,3},{4,5},{6,7,8,9}};
2.二维数组的练习
  二维数组的遍历
  求和
3.二维数组内存结构
  二维数组是由两个一维数组组成
  第一个一位数组存放的是内存地址

原创粉丝点击