0x01、引言 为什么要有数组
如果需要保存100个学员的成绩,如何做?
int a=12;
int b=13;
int c=14;
int d=15;
定义100个变量?NO, 我们可以使用数组
0x02、什么是数组?
一组具有相同数据类型的有序的集合(数据结构)
0x03、数组三个特点?
a、数组的长度固定 一旦定义就不可以改变 不可改变
b、数组中的元素可以基本数据类型 也可以是引用数据类型 但是数组本身 是引用数据类型
c、数组中的元素是有顺序
0x04、数组的声明有几种方式
0x05、数组定义的格式
格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
示例:int[] arr = new int[5]; // arr是什么数据类型? 是数组类型 int是元素类型 []就代表数组
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,……};
int[] arr = new int[]{3,5,11,18};
int[] arr = {3,5,11,18};
数组里面的元素个数比较多,为了方便操作这些元素,会自动的给数组中的元素进行编号,
从0开始的,这些编号---下标(角标),最大下标值为(长度-1)
可以自动给数组中的元素从0开始编号,方便操作这些元素。
总结:无论是更改和获取 都是通过 数组名称[下标] 的形式进行的;
0x06、数组的长度如何获取?数组下标的最大值是多少?
length 是属性
0x07、如何获取数组中的元素值?
数组名称[数组下标]
0x08、数组的初始化方式有几种
三种
1、默认初始化 为数组分配空间 并添加默认值 比如 int[] a = new int[12];
2、静态初始化 定义数组的时候 就进行赋值
比如:String[] str= new String[]{"one","two","three"};
int[] arr = {3,5,11,18};
3、动态初始化 为数组分配空间和赋值 动作分开进行
比如: String[] one = new String[7];
for(int i=0; i<one.length; i++)
{
one[i] = i*100+"";
}
0x09、数组的拷贝如何实现?
0x10、数组的排序、查找、复制、填充如何操作?
java.util 类 Arrays 从以下版本开始: 1.2
Arrays.toString() 将数组打印
Arrays.sort() 给数组排序
Arrays.binarySearch() 查找数组中某个元素 所在位置 注意 使用前要排序
System.arrayCopy() 从一个数组中复制一些元素 到目标数组中
String类型 转化为byte[] (字节数组)
String str = "asdfghjkl";
byte[] one = str.getBytes();//将String 变为字节数组
//byte[](字节数组) 转化为 String类型
byte[] two = {1,2,3,4,5};//定义了一个字节数组
String strOne = new String(two);//将字节数组中所有的元素 变为String
String strTwo = new String(two,1,3);//将字节数组中 从下标为1的位置开始,取三个字节数组元素
//并将取出的部分变为String
0x12、数组中的数组 二维数组[][]( 了解 )
格式1:int[][] arr = new int[3][2];
定义了名称为arr的二维数组
二维数组中有3个一维数组
每一个一维数组中有2个元素
一维数组的名称分别为arr[0], arr[1], arr[2]
给第一个一维数组1脚标位赋值为78写法是:arr[0][1] = 78;
格式2:int[][] arr = new int[3][];
二维数组中有3个一维数组
每个一维数组都是默认初始化值null
可以对这个三个一维数组分别进行初始化
arr[0] = new int[3];
arr[1] = new int[1];
arr[2] = new int[2];
格式3:int[][] arr = {{3,8,2} ,{2,7} , {9,0,1,6}}; // 二维数组中 的每一组{}代表了一个一维数组
定义一个名称为arr的二维数组
二维数组中的有三个一维数组
每一个一维数组中具体元素也都已初始化
第一个一维数组 arr[0] = {3,8,2};
第二个一维数组 arr[1] = {2,7};
第三个一维数组 arr[2] = {9,0,1,6};
第三个一维数组的长度表示方式:arr[2].length;
说明:
int[][] arr = new int[3][2];
System.out.println(arr.length);//打印二维数组的长度。其实就是一维数组的个数。
System.out.println(arr[1].length);//打印二维数组中角标为1一维数组的长度。
应用:计算总和的时候比较多 比如:成绩、业绩等等
int sum = 0;
int[][] arr = {{30,20,50},{10,20,30,40},{90,10}};
for(int x=0; x<arr.length; x++)
{
for(int y=0; y<arr[x].length; y++)
{
//
System.out.print(arr[x][y]+",");
sum += arr[x][y];
}
}
System.out.println("sum="+sum); //计算数组中元素的和
0x13 冒泡方式实现
/**
* 自己定义的冒泡排序
* @param arr int元素 类型的数组
* 比较的是两个相邻的元素
* 如果第一元素 比第二种元素大
* 则将两个位置元素进行交换
*/
public static void mySort(int[] arr){// 面试前 背一下
for( int i=0; i<arr.length-1 ;i++ ){//最后一个元素 没有必要和自己进行比较
for( int j=0; j<arr.length -1 -i; j++ ){//-1为了避免下标越界 -i是为了提高 判断的效率
if(arr[j]>arr[j+1]){//判断两个相邻的元素 大小
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
//
System.out.print("*");
}
}
//
System.out.println();
}
}