一。1 概念
存储多个相同类型数据,有固定的长度。Integer.MAX_VALUE-8
索引: 下标 O(1)
2. 定义数组
2.1 固定长度,定值
int[] a = {1,2,3,4};
2.2 动态数据
int[] a = new int[6];
2.3 other
int[] a = new int[]{1,2,3};
3.数组特性
3.1 固定长度
数组名称.length ---属性
3.2 索引从0开始
[0, a.length-1];
3.3 访问数组
a[ i ]
3.4 数组的遍历
3.4.1 循环
for(int i=0;i<10;i++){
System.out.println(a[i]);
}
3.4.2 增强型for:foreach
for( int t : a){
System.out.print(t+ "\t");
}
案例 1.找出数组中的第二大值
public static int second(int[] a){
int max=a[0];
int second=a[1];
if(max<second){
int t=max;
max=second;
second=t;
}
for(int i=2;i<a.length;i++){
int curr=a[i];
if(curr>max){
second=max;
max=curr;
}else if(curr<second){
continue;
}else{
second=curr;
}
}
return second;
}
二。数组排序
1.1 BigO表示法
测算时间复杂度。 O(n)
1.1.1 O(1)
int[] a={1,2,3,4,5};
a[2];
1.1.2 O(n)
int[] a={1,2,3,4,5};
for(int i=0;i<a.length;i++){
if(a[i]==5){
System.out.println(a[i]);
1.1.3 O(n*n)
空间复杂度稳定的
int[] a={1,2,3,4,5};
for(int i=0;i<a.length;i++){
for(int j=0;j< a.length;j++){
if(a[i]==5){
System.out.println(a[i]);
2.冒泡排序法
核心
数组中相邻两项比较,交换
public static void sort(int[] a) {
int count=0;
for (int i = 0; i < a.length; i++) {
boolean f = true; // 有序的开关
for (int j=0;j< a.length-i-1;j++){//-1防止越界
count++;
if(a[j]>a[j+1]){ //当前项大于下一项
f=false;
int tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
if(f) break;
}
System.out.println("count="+count);
}
3.选择排序
核心
一次循环找出最大、最小值
public static void sort(int[] a) {
for (int i = 0; i < a.length; i++) {
int min = a[i];
int pos = i;
for (int j = i + 1; j < a.length; j++) {
if (min > a[j]) { //不是最小值
min = a[j];
pos = j; //j是最小值位置
}
}
//找到最小值之后进行交换
a[pos] = a[i];
a[i] = min;
}
}
4.插入排序法
public static void insertionSort(int[] arr) {
int n = arr.length;
for (int i = 1; i < n; i++) {
int key = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > key) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = key;
}
}
三。数组辅助类Arrays
1 数组转换为字符串
Arrays.toString(数组)---》字符串
System.out.println(Arrays.toString(a));
2.排序
sort(a, from, end), [from, end]
3.数组填充值
fill(a,要填充的值)
4.数组拷贝
copyfy
5.binarysearch 二分查找
前提:有序
6.数组中数据删除问题
System.arraycopy(a, 3, a, 2, 2);
四。多维数组
java的多维数组本质: 一维数组。
看做一张表,行-列 坐标
二维数组: 二维数组中的元素是一个一维数组
int[][] a = new int[5][]; (√)
int[][] a = new int[][5]; (x)
案例:产生一个5x5二维数组,随机在数组中填入黑白棋子,打印出棋盘
public static void main(String[] args) {
Random random=new Random(System.currentTimeMillis());
String[][] a=new String[5][5];
String[] ball = {"●", "○"};
for (int i=0;i<5;i++){
for(int j=0;j<5;j++){
a[i][j]= ball[random.nextInt(2)];
System.out.print(a[i][j]+"\t");
}
System.out.println();
}