【Java笔记】08 数组
一、介绍
数组存放多个同一类型的数据,是引用类型
- 数组的定义
数据类型[] 数组名 = new 数据类型[大小]
int[] a = new int[5];
先声明,再创建
声明:数据类型 数组名[];或 数据类型[] 数组名;此时为null
创建:数组名=new 数据类型[大小];
静态初始化
数据类型 数组名[]={元素值,元素值,…}
- 注意
1.数组创建后,如果没有赋值,有默认值 int 0,short 0,byte 0,long 0 ,float 0.0,double 0.0,char \u0000,boolean false,String null
2.数组属引用类型,数组型数据是对象(object)
二、数组赋值机制
数组在默认情况下是引用传递,赋的值是地址——>赋值方式为引用传递
//arr2变化会影响到arr1int[] arr1 = {1,2,3};int[] arr2 = arr1;arr2[0] = 10;//arr1={10,2,3}

三、应用
排序
- 内部排序:所有数据加载到内存
- 外部排序:借助外部存储
- 冒泡排序
通过对待排序序列从后向前(从下标较大的元素开始),依次比较相邻元素 的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部
//数组[24,69,80,57,13]//第一轮 最大数放最后 24,69,80,57,13->24,69,80,57,13->24,69,57,80,13->24,69,57,13,80//第二轮 第二大的数放在倒数第二位置 24,69,57,13,80->24 57 69 13 80->24 57 13 69 80//第三轮 第三大的数放在倒数第三位置 24 57 13 69 80->24 13 57 69 80//第四轮 第四大的数放在倒数第四位置 13 24 57 69 80public class BubbleSort {public static void main(String []args) {int[] arr = {24,69,80,57,13};int temp = 0;for(int i=0;i<arr.length-1;i++){for(int j = 0;j < arr.length-1-i;j++){if(arr[j] > arr[j + 1]){temp = arr[j];arr[j] = arr[j + 1];arr[j+1] = temp;}}System.out.println("\n==第"+(i+1)+"轮==");for(int j=0;j < arr.length;j++){System.out.print(arr[j]+"\t");}}}}
查找
顺序查找
import java.util.Scanner;//顺序查找public class SeqSearch {public static void main(String []args) {/*有一个数列:白眉鹰王、金毛狮王、紫衫龙王、青翼蝠王猜数游戏:从键盘中任意输入一个名称,判断数列中是否包含此名称【顺序查找】要求: 如果找到了,就提示找到,并给出下标值*/String[] names = {"白眉鹰王","金毛狮王","紫衫龙王","青翼蝠王"};Scanner myScanner = new Scanner(System.in);System.out.println("请输入名字");String findName = myScanner.next();int index = -1;for(int i = 0; i < names.length; i++) {//比较 字符串比较 equals, 如果要找到名字就是当前元素if(findName.equals(names[i])) {System.out.println("恭喜你找到 " + findName);System.out.println("下标为= " + i);//把 i 保存到 indexindex = i;break;//退出}}if(index == -1) {//没有找到System.out.println("sorry ,没有找到 " + findName);}}}
四、多维数组

列数不确定初始化
public class MyClass {public static void main(String args[]) {int[][] arr = new int[3][];for(int i=0;i < arr.length;i++){arr[i] = new int[i+1];for(int j = 0;j < arr[i].length;j++){arr[i][j] = i+1;}}for (int i = 0;i<arr.length;i++){for(int j=0;j<arr[i].length;j++){System.out.print(arr[i][j]+" ");}System.out.println();}}}
int[] x,y[];
x是int类型的一维数组,y是int类型的二维数组(int[] y[])
- String[] str = new String[]{“a”,”b”,”c”};//ok
- int[] str = new int[]{1,2,3};//ok
public class Insert{public static void main(String[] args){/*已知有个升序的数组,要求插入一个元素,该数组顺序依然是升序的[10,12,45,90]->[10,12,23,45,90]数组扩容+定位*/int[] arr = {10,12,23,45,90};int insertNum = 23;int index = -1;//将要插入的位置//遍历arr,if insertNum<=arr[i],i就是插入位//if 遍历完没有 insertNum<=arr[i],index=arr.lengthfor(int i=0;i<arr.length;i++){if(insertNum <= arr[i]){index = i;break;}}if(index == -1){index = arr.length;}int arrNew = new int[arr.length+1];for(int i=0,j=0;i<arrNew.length;i++){if(i != index){arrNew[i] = arr[j];j++;}else{arrNew[i] = insertNum;}}arr = arrNew;for(int i = 0;i<arr.length;i++)System.out.println(arr[i]);}}
