【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变化会影响到arr1
int[] 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 80
public 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 保存到 index
index = 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.length
for(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]);
}
}