一 数组
1数组:数组是引用数据类型,用来保存多个数据
2数据结构:
数据结构是计算机存储,组织数据的方式。数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
3数组特性
1)内存中连续存储,并且下标从0开始(内存地址偏移)
2)数组长度一旦确,长度不能更改,也就意味着数组是不能添加和删除的
3)除非新建一个数组,把原数据复制到新数组中,在复制过程中可以进行添加和删除操作‘
4)所以 数组的查询和更改,效率是很高的,但是 ,添加和删除效率较低
5)数组都有一个内置属性 length 保存了数组的长度
6)在java中有一个 java.util.arrays类提供了一些数组操作
4 数组声明
1)静态声明:在已知每个元素的时候 使用静态声明
数据类型[] 变量名 = {值,值,值...} (简写方式)
数据类型[] 变量名 = new 数据类型[]{值,值,值...}
//静态声明
int [] arr = {1,2,3}
//对数组二次赋值,必须这样写,不能直接写{}
arr = new int[]{2,3,4};
int [] arr2 = new int [11];
2)动态声明:不知道数组中每个元素的时候
数组类型[] 变量名 = new 数据类型[长度];
5 数组使用
1) 获取数据
//静态初始化一个数组
int [] arr = {10,2,33,21};
//获取:数组[下标],从0开始
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
//数组长度:数组.length
System.out.println(arr.length);
//最后一个元素
System.out.println(arr[arr.length - 1]);
2)更改数据
arr [1]= 1; System.out.println(arr[1]);
3)遍历
//遍历
for (int i =0; i< arr.length;i ++){
System.out.println(arr[i]);
}
//增强for循环foreach
//把数组中的每一个元素,都赋值给变量
//for(数据类型 变量名 : 数组){}
for(int element:arr){
System.out.println(element);
}
4)常见异常
下标越界,空指针
6数组传递
public static void main(String[]args){
int i = 2;
m1(i);
m1(22);
int[]arr = {1,2,3};
m2(arr);
//数组字面量传递方式
m2(new int[]{1,2,3});
}
public static void m1(int i){
}
public static void m2(int[] arr){
}
7 Main方法传参
8传值和传址
1)传值 指的是传递基本类型的数据
2)传址/传引用 指的是传递引用数据类型的值
public static void main(String[]args){
int i =10;
m1(i);
System.out.println("main中的i=" +i);
int []arr={1,2,3};
m2(arr);
System.out.println(arr[0]);
}
public static void m1(int i){
i =20;
System.out.println("m1中的i=" +i );
}
public static void m2(int[] arr){
arr[0] = 11;
System.out.println(arr[0]);
}
}
二 二维数组
1声明方式
1)静态声明
int[][] arr = {
{1,2,3}
{2,3}
}
2)动态声明
int[][] arr = new int [3][4] 表示该二维数组中 ,有3个一维数组,并且每一个一维数组中有4个数据
int[][] arr = new int[3][] 表示该二维数组中,有三个一维数组,并且这三个一维数组都是null
这种需要单独初始化每一个一维数组的长度,一般用于每行每列不一样的情况(每一个一维数组中,元素个数不同的情况)
arr[0] = new int[5];
arr[1] = new int[2];
arr[2] = new int[15];
public static void main(String [] args){
//静态
int [][] arr1 = {
{1,2,3},
{2,3}
};
//表示该二维数组中,有3个移一维数组,并且每个一维数组中都有四个数据
int [][] arr2 =new int [3][4];
int [] [] arr3 = new int [3] [];
arr3[0] =new int[5];
arr3[1] = new int [3];
arr3[2] = new int [15];
}
}
2存储方式
3更改数据
//更改 数组[下标][下标] = 值 arr[3][1] = 33;
4遍历
public static void main(String []args){
int [][]arr = {
{1,2,3},
{22,31},
{12,91}
};
for(int i = 0;i < arr.length;i++){
for(int j =0;j
5动态声明锯齿状
public static void main(String[]args){
//二维表
int [][] arr = new int[5][6];
for(int i = 0;i
6交换变量的值
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);



