- 数组
数组作为对象的一种同样存储在堆中。作为一种存储基础数据类型的容器。还是蛮重要,虽然与集合相比 存在着长度固定的缺点,日常开发用到不多。但是作为java的基础知识点,重新温故下 还是蛮有必要的。
- 数组的定义
指通过声明数据类型和大小 来标识一组具有相同类型的容器.数组分为一维数组及二维数组。
- 一维数组数组的使用
- 数组的声明实例化
需要声明数组的2个基本元素:存储数据类型及存储数据的个数。
数组可以先声明 后实例化,也可以声明的同时初始化。以下是一维数组的常见使用方式。
String[] str=new String[3]; str={1,2,3}; String str=new String[]{1,2,3}; String str[]=new String[3]
.
- 数组的使用
获取数组的某个元素 例子如下str[0],str[1],str[2];
遍历数组 for(int i=0;str.length();i++)
需要注意的是数据与List集合一样,下标都是从0开始的
二维数组
二维数组相比一维数组 ,就是一维数组中的每个元素中,再放入一组一维数组,访问类似于数学概念中的x ,y坐标。x作为外面一维数组的 位置,y作为里面一维数组的位置。
- 二维数组的声明 初始化(整形数组中默认初始值为0)
int[][] arrays=new int[1][2];
arrays[0]={1,2};
int arrays[][]=new int[1][2];
int arrays[][]={{1,2}};
数组常用api方法
数组中大多数静态方法是有Arrays这个类提供的
- 数组填充Arrays.fill(int[] a,int value); 该方法可以通过各种重载形式将数据填充到任意类型的数组元素中
- 数组排序:Arrays.sort(object) 默认按照自小而大 对任意类型数组进行排序
- 数组复制:Arrays.copy(object)(这个方法老是容易忘,记牢 别忘记).
- 数组查询:Arrays.binarySearch(Object[] a,Obkect key),采用二分查找法,查询key值在a数组中的位置,不存在返回-1.类似字符串中的indexOf方法.
数组排序
虽然数组存在Arrays.sort可以对数组元素进行排序,但是默认只能从小到大排序。同时冒泡排序,选择排序,快速排序 作为java中常用的排序方法 还是需要重点掌握的.所以单独拿出来记录下(容易忘,原理知道,实际写的时候只记住冒泡排序了)
- 冒泡排序
冒泡排序的原理是按照相邻2个元素比较,结束为止为n-1-第几轮.如果满足条件则交换元素位置,循环n-1伦。
int[] a=new int[]{3,4,5,1,9,8};
for(int x=0;x<a.length()-1;x++ ){
for(int y=0;y<a.length()-1-x;y++){
if(a[y<a[y+1]]){
int num=a[y];
a][y]=a[y+1];
a[y+1]=num;
}
}
}
- 选择排序(也成为快速排序)
原理就是每次查找出一最大的数进行交换,交换的次数少效率高,外轮使用n-1控制,交换的位置 固定在外轮-1的位置. 通过内轮 判断出符合条件的数字位置在哪,然后跟该轮最后的数字进行交换. 每次交换的位置都会少一位,最终素有的数字就都能比较出来了(真TM难记)
int array={64,4,25,1,3,15};
int index;
for(int i=0;i<array.length-1;i++){
index=0;
for(int j=1;j<=array.length-1-i;j++){
if(array[j]>array[index]){
index=j;
}
}
int temp=array[array.length-i-1];
array[array.length-i-1]=array[temp];
array[temp]=array[array.length-i-1;
}
总结
数组无非就是熟悉一维数组及二维数组的声明 初始化,防止出现声明及初始化写法上的问题。同时知道数组同样作为对象存储在堆中。同时对于数组一些常用的api如复制 循环遍历 排序 填充及查询有所了解,能在用到的时候想到。最后也就是最重要的2种常用排序方法的写法 冒泡排序及直接排序(也称为选择排序),选择排序是每次找出最大或者最小的数与该轮 最后一个数字进行交换。这样交换的次数少 效率高。而冒泡排序是相领2个数字交换,结束的位置与轮数有关。需要重点掌握