1/4笔记

Day05 数组

1 数组

数组是引用数据类型,用来保存多个数据。

1.1数据结构

数据结构是计算机存储、组织数据的方式。

1.2 数组特性

内存中连续存储,并且下标(也叫索引)从0开始 ,即内存地址偏移;

数组长度一旦确定,长度不能更改,也就是不能添加和删除;

除非新建一个数组,把原数据复制到新数组,复制过程中可以添加和删除;

所以数组查询和更改效率很高,添加和删除效率很低;

数组都有一个 length 保存数组长度;

java中有一个 java.util.Arrys类 提供了一些数组操作;

1.3 数组声明

1)静态声明:已知每个元素的时候,使用静态声明

数据类型 变量名 = 值 ;

int i = 2 ;

数据类型[] 变量名 = {值,值,值,......} (简写方式)

数据类型[] 变量名 = new 数据类型[]{值,值,值,.......};比如二次赋值时,必须写这样

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

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

int[][] arr = {

{1,2,3},{2,3,4},{3,4,5}

};

2)动态声明:不知到数组中每个元素的时候,使用动态声明

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

int[] arr = new int[5];

int[][] arr = new int[2][3];

动态声明,保存的是对应类型的默认值,比如上面程序中 会保存5个0

整数 0 小数 0.0 布尔 false 字符 \u0000 引用类型 null

1.4 存储方式

1.5 数组使用

1.5.1 获取数据

int[] arr = {10,11,12,3};

获取:数组[下标],注意 下标从0开始

sysout(arr[0]);

数组长度:数组.length

sysout(arr.length);

最后一个元素

sysout(arr[arr.length-1]);

1.5.2 更改数据

更改:数组[下标] = 值;

arr[1] = 100;

sysout(arr[1]);

1.5.3 遍历

for(int i=0;i<arr.length;i++){

sysout(arr[i]);

}

1.5.4 常见异常

1)下标越界

2)空指针异常:数据没有进行初始化,但是对数组进行了属性操作

1.5.5 数组传递

数组自变量传递方式    m1(new int[]{1,2,3})

1.5.6 main方法传参

以空格隔开,作为分隔符

1.6 传值和传址

引用类型传递之后,互相有影响,因为指向同一个堆内存对象空间

1.7 数组复制

src 原数组

srcPos 原数组起始位置(包含)

dest 目标数组

destPos 目标数组起始位置

length 插入个数

因为是插入复制,所以肯定会更改数组长度,因为数组长度不能更改,所以我们只能新建数组,并通过返回值把数组返回

2 二维数组

2.1 声明方式

声明:静态声明 int[][] arr1={{1,2},{1,2,3},{1}};

          动态声明  int[][] arr2=new int[3][4];

                     int[][] arr3=new int[3][];   arr3[0]=new int[3];  arr3[1]=new int[33];  arr3[2]=new int[13];

2.2 存储方式

2.3 使用方式

2.3.1 获取数据

获取:数组[下标][下标];

2.3.2 更改数据

更改:数组[下标][下标]=值;

2.3.3 遍历

2.3.4 动态声明锯齿状

 int[][] arr3=new int[3][];   arr3[0]=new int[3];  arr3[1]=new int[33];  arr3[2]=new int[13];

3 交换变量的值

int x = 10;

int y = 11;

// 1 )中间变量(开发常用)

int temp = x;

x = y;

y = temp;

System.out.println("x=" + x + ",y=" + y);

// 2 )位移运算(面试用)

x = 2; // 0000 0010

y = 3; // 0000 0011

// 转换为对应的二进制,每位异或,相同取0,不同取1

x = x ^ y; // 0000 0001

y = x ^ y; // 0000 0010

x = x ^ y; // 0000 0011

System.out.println("x=" + x + ",y=" + y);

// 3 )加减运算

x = 10;

y = 20;

x = x + y;

y = x - y;

x = x - y;

System.out.println("x=" + x + ",y=" + y);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值