JAVA数据类型之数组

一、基本概念

1、维度

0维:一个点(单独一个数据)

1维:由无数个点构成的一条线(由多个单独数据构成一维数组)

2维:由无数条线构成的一个面(由多个一维数组构成二维数组)

3维:由无数的面构成的立方体(由多个二维数组构成三维数组)

4维:由无数个立方体构成的超立方体(由多个三维数组构成四维数组)

5维:由多个超立方体构成平行宇宙(由多个三四维数组构成五维数组)

总结:n维数组是由多个n-1维数据构成的(n>0)

2、数组是使用有序方式对数据进行存储的一种结构

二、名称及属性

 (一)一维数组

数组的元素:数据(内容)
索引/下标0123

4

内容abcde

1、数组的索引/下标/角标:每个元素的门牌号(标识),从0开始

2、数组可以根据下标获取元素:

数组名[下标]

如:

array[0]

3、 数组的长度:数组元素的个数  

数组名.length 

是一个整数型

如:

array.length

(二)二维数组

 1、数组的元素:一维数组

 2、数组的长度:一维数组的个数(前面那个[]里的值)

//如:

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

System.out.println(arr.length);

int[][] array = new int[5][3];

输入结果 

3

5

 3、访问二维数组里面某个一维数组 :

二维数组名[下标]

如:

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

arr[0] 代表访问第一个数组{1,2,3}

 4、访问二维数组里最底层的元素

二维数组名[下标1][下标2]

如:

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

arr[0][1] 代表访问第一个数组{1,2,3}的第2个元素“2”。

三、数组特性

1、长度固定不可变
2、所有数据类型都有自己的对应的数组
3、同一个数组数据类型必须一致

四、创建数组

(一)静态创建/静态初始化

1、完整写法
一维数组:

数据类型[ ] 数组名 = new 数据类型[]{数据1,数据2,数据3...};

如:

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

二维数组: 

数据类型[ ][ ]  数组名 = new 数据类型[ ][ ]{{数据1-1,数据1-2,数据1-3},{数据2-1,数据2-2,数据2-3},{数据3-1,数据3-2,数据3-3}};

如:

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

 2、简便写法

一维数组:

数据类型[] 数据名 = {数据1,数据2,数据3...} (面向对象时不好用)

如:

int[]array = {1,2,3};

(二)动态创建/动态初始化

一维数组:

数据类型[ ]  数组名 = new 数据类型[长度];

如:

int[] array = new int[5];

//代表创建一个长度为5的整数型数组

二维数组:

数据类型[ ][ ]  数组名 = new 数据类型[一维数组的个数][每一个一维数组元素的个数];

如:

int[][] array = new int[a][b];

//代表创建一个a行b列的整数型二维数组

系统会给出默认值(出厂设置):
-整数类型:0
-浮点数类型:0.0
-字符串(引用数据类型):null
-char : 0 (空字符)
-布尔类型:false

#直接打印数组名

一维数组:

[I@15db9742
-@ 分隔符
-[I 这个数组是int类型的一维数组
-15db9742 是十六进制的内存地址
进制常识: 十进制,没有十, 0~9  10
二进制,没有二,  0 1  10
十六进制,没有十六,0~9 a b c d e f

二维数组:

[[I@15db9742

-多了一个[

#java内存结构

 -寄存器 ——存取效率最高的区域,由CPU直接调度
 -本地方法区 ——由本地操作系统调度
 -方法区 ——存储java编译好的class文件内容
 -堆 ——存储对象的实例(new出来的东西,等号的右边)
 -栈 ——存活时间最短,存储基本类型的局部变量(定义在方法中的变量),以及对象的引用(等号的左边)

五、数组的遍历

(一)一维数组

1、概念:一个一个获取数组中的元素
2、方式一:根据下标获取(元素不多可以用)
3、方式二:使用循环遍历

 int[] array = new int[] {1,2,3,4,5}; 
(int i =0 ;i<array.length;i++) {
    System.out.print(array[i]+" ");
}

结果是:

1 2 3 4 5 

会遇到的bug:
ArrayIndexOutOfBoundsException(数组越界)——下标超过了长度

(二)二维数组

注意:需要两层循环,外层循环负责遍历每个一维数组,内层循环负责遍历数组中每个元素

六、数组中思想

(一)累加的思想

在循环外面定义一个变量,
在循环过程中进行“累”的运算

放入数组中进行遍历运算。

        int[] array = {321,123,585,6261};
        int sum = 0;
        for(int i=0;i<array.length;i++) {
            sum+=array[i];
        }
        System.out.println("总数:"+sum);

(二)统计的思想

1、在循环遍历之外定义一个变量用于计数
2、在循环遍历过程中判断满足条件的情况下,计数器增加

        //统计
        int[] array1 = {321,76,32,7613,2,32,78,45};
        int count = 0;
        for(int i =0;i<array1.length;i++) {
            if(array1[i]%2==0) {
                count++;
            }
        }
        System.out.println("偶数的总数:"+count);

(三)求最值的思想

1、在循环遍历之外定义一个变量作为参照物
2、在循环过程中,将参照物与每一个元素进行比对
3、如果元素比参照物大,将元素的值赋值给参照物

        //求最值
        int[] array2= {-321,-76,-32,-7613,-2,-32,-78,-45};
        int max = array2[0];//一开始就赋值为数组中的某个元素
        for(int i =0;i<array2.length;i++) {
            if(array2[i]>=max) {
                max=array2[i];
            }
        }
        System.out.println("最大值:"+max);

(四)排序的思想

1、在循环遍历之外定义一个变量作为中间变量

2、在双重循环过程中,将两个下标的元素进行比对

3、如果元素有差,那么交换两个元素。

        //排序
        int[] array3=new int[] {7,5,3,2,9,8,4,1,6};
        int x=array3[0];
        for(int i=0;i<array3.length;i++) {
            for(int j =i;j<array3.length;j++) {
                if(array3[i]>=array3[j]) {
                    x=array3[i];
                    array3[i] =array3[j];
                    array3[j]=x;
                }
            }
        }
        System.out.println(Arrays.toString(array3));

七、数组的修改

(一)元素的修改

数组名[下标]=新的值

(二)地址的修改

int[] array = {1,2,3,4};

array = new int[3];

java有一个自动释放内存机制,没被指针指到的堆会自动释放。

int arr = {22,44,66};

array = arr ; //数据的浅拷贝(仅拷贝地址,本质上是同一个对象)

深拷贝:将某个数组中的每一个元素复刻给另一个数组(本质上是两个数组,互不影响)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值