Java入门:Day04—数组

Day04—数组

1、定义

数组是一个容器,可以同时存放多个数据;是存储相同数据类型的一组数据的集合

2、一维数组定义

(1)静态初始化:
在创建数组的同时并进行赋值操作。确定数组中的具体内容时使用。

//①数据类型[] 数组名 = new 数据类型[]{元素1,元素2.....};
int[] score = new int[]{77,78,99,56,67};

//②数据类型[] 数组名 = {元素1,元素2.....};
int[] score = {77,78,99,56,67};

(2)动态初始化:
不确定数组中的具体内容时使用

//①数据类型[] 数组名 = new 数据类型[数据的长度];
String[] names = new String[5];

//②数据类型 数组名[] = new 数据类型[数据的长度];
String names[] = new String[5];
//数据类型:空间大小;	数组名:这一组数据的统称;	new:动作;		长度:数组的个数

(3)数组特点:
①数组是一个引用数据类型;

②数组一次存放多个值,数据类型必须相同(统一);

③数组的长度在程序运行期间不可以改变。

(4)常见问题:

①数组的溢出:访问数组元素时,下标编号不存在,会发生这种索引越界异常。

②空指针异常,不能直接使用未开辟堆内存空间的数组,数组必须进行初始化才可以使用。

(5)foreach循环(增强循环):
依次从数组取出各个元素,赋值给这个变量,同这个变量进行输出;变量的数据类型和数组一致。

/*
for (数据类型 变量 : 数组或集合){
    }
    */
for(int i:arr){   //例如
}

(6)对数组的操作:
①求数组长度

public class Test1_ArrLength {
    public static void main(String[] args) {
         int[] arr = {4,6,2,9,6,1,12,65,3,34,47};
         int len = arr.length;  //获得arr2数组的长度
         System.out.println("数组的长度为"+len);
    }
}

②遍历数组

public class Test2_Arr {
       public static void main(String[] args) {
            int[] arr = {4,6,2,9,6,1,12,65,3,34,47};
            for(int i = 0; i <arr.length; i++){   //快捷键(数组名.fori)如:arr.fori
                System.out.println(arr[i]);
            }
       }
}

③获取最大、最小值

//foreach方法
    public static void main(String[] args) {
            int[] arr = {4,6,2,9,6,1,12,65,3,34,47};
            int max = arr.length-1;
            int min = arr[0];
            for (int i:arr) {
                if(i > max){
                    max = i;
                }
                if(i < min){
                    min = i;
                }
            }
            System.out.println("最大值为:"+max);
            System.out.println("最小值为:"+min);
    }

//for循环方法
    public static void main(String[] args) {
            int[] arr = {4,6,2,9,6,1,12,65,3,34,47};
            int max = arr.length-1;
            int min = arr[0];
            for(int i = 0; i < arr.length; i++){
                if(arr[i] > max){
                    max = arr[i];
                }
                if(arr[i] < min){
                    min = arr[i];
                }
            }
            System.out.println("最大值为:"+max);
            System.out.println("最小值为:"+min);
    }

④数组元素的反转

 public class Test4_ArrReverse {
        public static void main(String[] args) {
            int[] arr = {4,6,2,9,6,1,12,65,3,34,47};
            for (int i = 0; i < arr.length; i++) { //输出未反转前的数组
                System.out.print(arr[i]+"\t");
            }
            System.out.println();
            //数组反转
            int center = arr.length / 2;
            int head = 0; //前下标
            int end = arr.length - 1;//后下标
            for(int i = 0; i < center; i++){  //数据交换
                int temp = arr[head];
                arr[head] = arr[end];
                arr[end] = temp;
                head++;  //往下一个数据走
                end--;
            }
            for (int c  : arr) {  //打印反转后的数组
                System.out.print(c+"\t");
            }
            System.out.println();
       }
}

//简便方法(有缺陷)
    public static void main(String[] args) {
            int[] arr = {4,6,2,9,6,1,12,65,3,34,47};
            for (int i = 0; i < arr.length; i++) { //输出未反转前的数组
                System.out.print(arr[i]+"\t");
            }
            System.out.println();
        
            for (int i = arr.length-1; i >= 0; i--) {
                System.out.print(arr[i]+"\t");
            }
    }

⑤数组元素的查找

public class TestFind{
	  public static void main(String[] args) {
            String[] arr = {"张三","李四","王五","徐三","赵四"};
            Scanner input = new Scanner(System.in);
            System.out.print("请输入您要查找的元素:");
            String name = input.next();
            int index = -1;  //定义索引变量(找有没有要查找的元素)
            for (int i = 0; i < arr.length; i++) {
                if(name.equals(arr[i])){  //数组中比较字符串是否相等
                    index = i;
                    break;
                }
            }
            if(index == -1){
                System.out.println("没有您要查找的元素!");
            }else{
                System.out.println("您要查找的元素在"+index);  //输出查询元素的下标
                System.out.println(arr[index]);
            }
      }
}

⑥数组元素的添加

public class Test5_ArrAdd {
      public static void main(String[] args) {
            String[] arr = {"张三","李四","王五","徐三","赵四"};
            Scanner input = new Scanner(System.in);
            System.out.print("请输入您要添加的元素:");
            String name = input.next();
            String[] newArr = null;  //声明一个新数组
            if(arr[arr.length-1] != null){  //说明数组已满
                newArr = new String[arr.length + 2];  //创建新容器
                for (int i = 0; i < arr.length; i++) { //数据迁移(arr的值往newArr里迁移)
                    newArr[i] = arr[i];
                }
                arr = null;  //指向arr数组的指向断开
            }
            //判断空位置
            int index = -1;
            for (int i = 0; i < newArr.length; i++) {
                if(newArr[i] == null){
                    index = i;
                    break;
                }
            }
            if(index != -1){
                newArr[index] = name;
            }else {
                System.out.println("没有位置了!");
            }
            for (String n:newArr) {
                if(n == null){
                    break;
                }
                System.out.print(n+"\t\t");
            }
      }
}

⑦数组元素的删除

public class Test5_ArrDel {
       public static void main(String[] args) {
            String[] arr = {"张三","李四","王五","徐三","赵四"};
            Scanner input = new Scanner(System.in);
            System.out.print("请输入您要删除的元素:");
            String name = input.next();
            int index = -1;  //定义索引变量(找有没有要删除的元素)
            for (int i = 0; i < arr.length; i++) {
                if(name.equals(arr[i])){  //数组中比较字符串是否相等
                    index = i;
                    break;
                }
            }
            System.out.println("******************删除之前*******************");
            for (String a:arr) {
                System.out.print(a+"\t\t");
            }
            if(index !=-1){  //说明有这个元素
                //数据前移
                for (int i = index; i < arr.length-1; i++) {
                    arr[i] = arr[i+1];
                }
                arr[arr.length-1] = null;  //数组最后一个元素置空
                System.out.println("\n******************删除之后*******************");
                for (String a : arr) {
                    if(a == null){
                        break;
                    }
                    System.out.print(a+"\t\t");
                }
            }else{
                System.out.println("没有你要删除的元素!");
      }
}

⑧数组元素的插入

public class Test5_ArrInto {
      public static void main(String[] args) {
            String[] arr = {"张三","李四","王五","徐三","赵四",null};
            Scanner input = new Scanner(System.in);
            System.out.print("请输入您要插入的元素位置:");
            int num = input.nextInt();
            System.out.print("请输入您要插入的元素:");
            String name = input.next();
            //判断空位置
            int index = -1;
            for (int i = 0; i < arr.length; i++) {
                if(arr[i] == null){
                    index = i;
                    break;
                }
            }
            if(index != -1){
                for(int i = arr.length-1; i > num; i--){
                 arr[i] = arr[i-1];
                }
                arr[num] = name;
                for (String n:arr) {
                    System.out.print(n+"\t\t");
                }
            } else {
                System.out.println("没有空位置!");
            }
      }
}

3、排序

(1)冒泡排序:两个相邻的元素依次进行比较,外层循环长度-1,内层循环长度-i -1

public class TestBubbleSort {
    public static void main(String[] args) {
        int[] arr = {92,77,11,89,9,66,26,19,33,6};
        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]){
                    int temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
        }
        System.out.println("输出排序后的数组:");
        for (int j : arr) {
            System.out.print(j+"\t");
        }
    }
}

(2)选择排序:选择一个固定的元素,和其他每个元素进行比较

public class TestSelectSort {
    public static void main(String[] args) {
        int[] arr = {92,77,11,89,9,66,26,19,33,6};
        for (int i = 0; i < arr.length-1; i++) {   //一次
            for (int j = 1+i; j < arr.length; j++) {  //一遍
                if(arr[i] < arr[j]){  //比较
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        System.out.println("输出排序后的数组:");
        for (int j : arr) {
            System.out.print(j + "\t");
        }
    }
}

(3)插入排序:将一组元素分成已排序和未排序两个区间,将未排序区间插入到已排序区间完成排序

public class TestInsertSort {
    public static void main(String[] args) {
        int[] arr = {92,77,11,89,9,66,26,19,33,6};
        for (int i = 0; i < arr.length; i++) {  //比较次数
            int data = arr[i];  //变量
            int index = i;  //下标
            while(index > 0){
                if(data > arr[index-1]){
                    arr[index] = arr[index-1]; //赋值
                }else{
                    break;
                }
                index--;
            }
            arr[index] = data;  //插入数据
        }
        System.out.println("输出排序后的数组:");
        for (int i : arr) {
            System.out.print(i+"\t");
        }
    }
}

4、二维数组

(1)定义:
描述多行多列的结构,表结构。 一维数组中嵌套一维数组,形成二维数组。

(2)动态初始化

数据类型[][] 数组名 = new 数据类型 [行的长度][列的长度];
int[][] x = new int [2][3];

数据类型 数组名[][] = new 数据类型 [行的长度][列的长度];
int x[][] = new int [2][3];

(2)静态初始化

数据类型[][] 数组名 = new 数据类型[][]{{元素1,元素2.....},{元素1,元素2.....}};
int[][] x = new int [][]{{1,2,3},{2,3,4},{3,4,5}};

数据类型[][] 数组名 = {{元素1,元素2.....},{元素1,元素2.....}};
int[][] x = {{1,2,3},{2,3,4},{3,4,5}};

5、Arrays类

(1)binarySearch(查询,底层使用二分查询,必须有序)返回元素在数组的下标

public class TestBinarySearch {
    public static void main(String[] args) {
        int[] arr = {9, 2, 3, 1, 5, 6, 4, 8, 7};
        //排序
        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]){
                    int num = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = num;
                }
            }
        }
        System.out.print("输出排序后的数组:");
        for (int i : arr) {
            System.out.print(i + "\t");
        }
        System.out.println("\n查询的元素下标为:" + Arrays.binarySearch(arr,7));//第一个参数数组,查询的元素
    }
}

(2)sort(数组) 排序 升序。

public class TestSort {
    public static void main(String[] args) {
        int[] arr = {92,77,11,89,9,66,26,19,33,6}; //无序
        System.out.println("排序前的数组 :"+ Arrays.toString(arr));
       /* Arrays.sort(arr,2,5);//给选定范围排序,起始位置包括,结束没有包括*/
        Arrays.sort(arr);  //升序排序(降序只能手写)
        System.out.println("排序后的数组 :"+Arrays.toString(arr));
    }
}

(3)fill(数组,值) 替换。

public class TestFill {
    public static void main(String[] args) {
        int[] arr = {92,77,11,89,9,66,26,19,33,6}; //无序
        System.out.println("替换前的数组 :"+ Arrays.toString(arr));
        Arrays.fill(arr, 2,5,100);  //将下标2——5的元素替换为100
        System.out.println("替换后的数组 :"+Arrays.toString(arr));
    }
}

(4) equals(数组,数组) 比较

public class TestEquals {
    public static void main(String[] args) {
        String[] arr1 = {"apple", "banana", "orange"};
        String[] arr2 = {"apple", "banana", "orange"};
        System.out.println(Arrays.equals(arr1,arr2));
    }
}

(5)copyOf(数组,长度) 复制

public class TestCopyOf {
    public static void main(String[] args) {
        int[] arr = {92,77,11,89,9,66,26,19,33,6};
        int[] arr2 = {1,2,3,4,5};
        int[] arr1 = Arrays.copyOf(arr, arr.length);
        System.out.println("原数组:" + Arrays.toString(arr));
        System.out.println("原样复制后的数组arr1:"+Arrays.toString(arr1));
        System.arraycopy(arr,2,arr2,1,3);  //把arr数组下标为2开始的数依次插入arr2数组下标为1——3范围内
        System.out.println("复制后的数组arr2:"+Arrays.toString(arr2));
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值