数组

1.数组与变量

  变量: 存储单个数据 例如:int a=39;
  数组: 相同数据类型的有序集合,存储多个数据 []  例如:int[] a=int[5]; 此时可以存储5个int类型的元素
  因此变量多了可以存放在数组里

2.数组的特点:

  1.数组是一个引用数据类型[]
  2.数组是一个容器,长度一旦确定不可改变
  3.数组中存放的数据数据类型要求相同
  4.位置有序(下标|索引 都是从1开始,每次+1)
3.数组的声明: 

数据类型 变量名(变量的声明)
int i=9;
//数据类型[] 数组名;    ---数组的声明 --推荐
String[] arr1;
//数据类型 数组名[];
int a[];
//数据类型: 规定数组中存储数据的数据类型
arr1=new String[3];
可以为基本数据类型四类八种    可以为引用数据类型:类 接口 数组

4.数组的初始化: 

//1.动态初始化(先创建后赋值)
String[] name;
name=new String[]{"wnag","ma","zi"};
//数据类型[] 数组名 = new 数据类型[长度];
String names = new String[2];
names[0] = "li";
names[1] = "si";
//默认值: (数组中的数据类型赋值,存在默认值)
//整数(int,long,short): 0
//小数(double,float): 0.0
//布尔(boolean)类型: false
//字符(char)类型:使用英文单引号既 ' '
char zifu='a';
//引用数据类型: null
//2.静态初始化(创建的同时赋值)
//数据类型[] 数组名 = new 数据类型[]{值1,值2,值3...};
char[] arr = new char[]{'a','b','c'};
//数据类型[] 数组名 = {值1,值2,值3...};
int[] number={23,21,44};

5.操作数组中的数据:

//根据索引操作 数组名[索引] 索引:0~length-1
String[] name;
name = String[]{"zhang","san","and","li"};
System.out.println(name[1]);//输出索引下标为1的元素,为san
//数组属性:数组名.length
System.out.println(name.length);//打印数组名为name的数组长度

6.数组的遍历(把数据按照一定规律获取)
普通for循环:for(条件初始化;条件判断;条件变化){条件作为数组的索引存在}

//定义一个数组,使用普通for循环遍历
int[] number = new int[]{1,4,6,7,8};
for(int i=0;i<number.length;i++){
  System.out.println(number[i]);           
} 

增强for循环|for..each
for(数据类型 变量名 : 数组名|容器名){
变量指代数组中的每一个数据值(从前往后)
}

int[] numbers = {3,8,9,3,4};
//
增强for循环遍历 for(int number:numbers){ System.out.println(number); }

7.使用数组时常见的异常

  • NullPointerException 空指针异常:引用指向为null
  • NegativeArraySizeException 数组长度负数异常:数组长度为负数了
  • ArrayIndexOutOfBoundsException 数组索引越界异常:使用索引操作正常范围 0~length-1

二、二维数组

1.定义格式: 

动态:

//第一种
int[][] arr01;
arr01 = new int[2][];//这里的外层数组长度必须指定,内层的可有可无
arr01[0][] ={2,3,1,5};
arr01[1][] = {6,7,9};

静态

String[][] arr03={{"love","and"},{"share","piece"}};
//第二种
int[][] arr02 = new int[2][2]{{34,31},{35,33}};

2.二维数组的遍历

普通for嵌套普通for

//for循环嵌套for循环
int[][] arr= {{1,2,3},{4,5},{6}};
for(int i=0;i<arr.length;i++){
  for(int j=0;j<arr[i].length;j++){
     System.out.println(arr[i][j]);   
  }  
}
int[][] arr= {{1,2,3},{4,5},{6}};
System.out.println("----------普通for嵌套增强for--------");
//i作为外层数组的索引
for(int i=0;i<arr.length;i++) {
    //j代表内层小数组中的每一个数据
    for(int j:arr[i]) {
    System.out.println(j);
    }
}
        
System.out.println("----------增强for嵌套增强for--------");
for(int[] a:arr) {
    for(int i:a) {
        System.out.println(i);
    }
}

3.Arrays 工具类
 操作数组的工具类,封装了很多常用来操作数组的方法,静态工厂

int[] number = {2,4,3,6,19,30,1,7};
int[] number1 = {2,4,3,6,19,30,1,7};
//拷贝 Arrays.copyOf(数组名,元素个数)
System.out.println(Arrays.toString(Arrays.copyOf(arr, 7)));;  //拷贝
System.out.println(Arrays.toString(Arrays.copyOf(arr, 4)));;  //截取
System.out.println(Arrays.toString(Arrays.copyOf(arr, 10)));;  //填充
//Arrays.fill(arr, -1) 将数组arr全部填充为-1
System.out.println(Arrays.toString(arr));
//Arrays.fill(arr, 1,3,500);将数组arr从索引位置1到3全部填充为500
System.out.println(Arrays.toString(arr));
//Arrays.sort(数组名); 按照升序排序
Arrays.sort(arr);  //默认升序
System.out.println(Arrays.toString(arr));
//二分法查找:Arrays.binarySearch(数组名,查找元素) 注意:二分法查找必须是先排序在查找
System.out.println(Arrays.binarySearch(arr, 9));
//比较两个数组元素的内容是否相等

System.out.println(Arrays.equals(number, number1));
//深层次比较,一般使用在二维数组中
System.out.println(Arrays.deepEquals(number, number1));

 

   

posted @ 2020-03-23 20:31  smile马伊子  阅读(148)  评论(0)    收藏  举报