• Java 数组(Arrays)相关


    1.什么是数组

    • 数组是相同类型数据的有序集合
    • 数组描述的是相同类型的若干个数据,按照一定的先后次序排列组合而成。
    • 其中,每一个数据称作一个数组元素,每个数组元素可用通过一个下标来访问它们。

    2.数组的声明和创建

    数组的四个基本特点:

    • 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。
    • 其元素必须是相同类型,不允许出现混合类型。
    • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。
    • 数组变量属引用类型,数组也可以看成是对象,数组中的每一个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保持原始类型还是其他对象类型,数组对象本身是在堆中的。
    1. package org.psmaxwell.array;
    2. public class ArrayDemo01 {
    3. //变量的类型 变量的名字 = 变量的值;
    4. //数组类型
    5. public static void main(String[] args) {
    6. int[] nums; // 1.定义
    7. nums = new int[10]; //2.创建一个数组
    8. //3.给数组元素中赋值
    9. nums[0] = 1;
    10. nums[1] = 2;
    11. nums[2] = 3;
    12. nums[3] = 4;
    13. nums[4] = 5;
    14. nums[5] = 6;
    15. nums[6] = 7;
    16. nums[7] = 8;
    17. nums[8] = 9;
    18. nums[9] = 10;
    19. //计算所有元素的和
    20. int sum = 0;
    21. //获取数组长度: arrays.length
    22. for (int i = 0; i < nums.length; i++) {
    23. sum = sum + nums[i];
    24. }
    25. System.out.println("总和为:"+sum);
    26. }
    27. }

    3.三种初始化及内存分析

     

     

    1. 静态初始化:
    2. int[] a = {1, 2, 3};
    3. Man[] mans = {new Man(1,1),new Man(2,2)};
    1. 动态初始化:
    2. int[] a = new int[2];
    3. a[0]=1;
    4. a[1]=2;

    数组的默认初始化:
    数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化

    1. package org.psmaxwell.array;
    2. public class ArrayDemo02 {
    3. public static void main(String[] args) {
    4. // 静态初始化: 创建 + 赋值
    5. int[] a = {1,2,3,4,5,6,7,8,9};
    6. System.out.println(a[0]);
    7. //动态初始化
    8. int[] b = new int[10];
    9. b[0] = 10;
    10. System.out.println(b[0]);
    11. System.out.println(b[1]);
    12. System.out.println(b[2]);
    13. System.out.println(b[3]);
    14. }
    15. }

    4.下标越界及小结

    1. package org.psmaxwell.array;
    2. public class ArrayDemo02 {
    3. public static void main(String[] args) {
    4. // 静态初始化: 创建 + 赋值
    5. int[] a = {1,2,3,4,5,6,7,8,9};
    6. System.out.println(a[0]);
    7. for (int i = 0; i < a.length; i++) {
    8. System.out.println(a[i]);
    9. }
    10. //动态初始化: 包含默认初始化
    11. // int[] b = new int[10];
    12. // b[0] = 10;
    13. // b[1] = 10;
    14. // System.out.println(b[0]);
    15. // System.out.println(b[1]);
    16. // System.out.println(b[2]);
    17. // System.out.println(b[3]);
    18. }
    19. }

    5. 数组的使用

    • 普通的FOR循环
    •  FOR-Each循环
    • 数组作方法入参
    • 数组作返回值
    1. package org.psmaxwell.array;
    2. public class ArrayDemo04 {
    3. public static void main(String[] args) {
    4. int[] arrays = {1,2,3,4,5};
    5. // //jdk 1.5 没有下标
    6. // for (int array : arrays) {
    7. // System.out.println(array);
    8. // }
    9. // printArray(arrays);
    10. int[] reverse = reverse(arrays);
    11. printArray(reverse);
    12. }
    13. // 打印数组元素
    14. public static void printArray(int[] arrays){
    15. for (int i = 0; i < arrays.length; i++) {
    16. System.out.print(arrays[i]+" ");
    17. }
    18. }
    19. //反转数组
    20. public static int[] reverse(int[] arrays) {
    21. int[] result = new int[arrays.length];
    22. //反转的操作
    23. for (int i = 0,j=result.length-1;i< arrays.length; i++,j--) {
    24. result[j] = arrays[i];
    25. }
    26. return result;
    27. }
    28. }

    6.二维数组

    1. package org.psmaxwell.array;
    2. public class ArrayDemo05 {
    3. public static void main(String[] args) {
    4. //[4][2]
    5. /**
    6. * 1,2 array[0]
    7. * 2,3 array[1]
    8. * 3,4 array[2]
    9. * 4,5 array[3]
    10. */
    11. int[][] array = {{1,2},{2,3},{3,4},{4,5}};
    12. for (int i = 0; i < array.length; i++) {
    13. for (int j = 0; j < array[i].length; j++) {
    14. System.out.println(array[i][j]);
    15. }
    16. }
    17. // System.out.println(array[0][0]);
    18. // System.out.println(array[0][1]);
    19. // System.out.println(array[1][0]);
    20. // System.out.println(array[1][1]);
    21. // System.out.println(array[2][0]);
    22. // System.out.println(array[2][1]);
    23. // System.out.println(array[3][0]);
    24. // System.out.println(array[3][1]);
    25. }
    26. // 打印数组元素
    27. public static void printArray(int[] arrays){
    28. for (int i = 0; i < arrays.length; i++) {
    29. System.out.print(arrays[i]+" ");
    30. }
    31. }
    32. }

     7.Arrays类讲解

    1. package org.psmaxwell.array;
    2. import java.util.Arrays;
    3. public class ArrayDemo06 {
    4. public static void main(String[] args) {
    5. int[] a = {1,2,3,4,9000,1123,231,42,633,67,74};
    6. // System.out.println(a); //[I@e9e54c2
    7. //打印数组元素Arrays.toString
    8. // System.out.println(Arrays.toString(a));
    9. // printArray(a);
    10. Arrays.sort(a); //数组进行自动排序
    11. System.out.println(Arrays.toString(a));
    12. }
    13. public static void printArray(int[] a){
    14. for (int i = 0; i < a.length; i++) {
    15. if(i==0){
    16. System.out.print("[");
    17. }
    18. if(i== a.length-1){
    19. System.out.println(a[i]+"]");
    20. }else{
    21. System.out.print(a[i]+", ");
    22. }
    23. }
    24. }
    25. }
    1. package org.psmaxwell.array;
    2. import java.util.Arrays;
    3. public class ArrayDemo06 {
    4. public static void main(String[] args) {
    5. int[] a = {1,2,3,4,9000,1123,231,42,633,67,74};
    6. // System.out.println(a); //[I@e9e54c2
    7. //打印数组元素Arrays.toString
    8. // System.out.println(Arrays.toString(a));
    9. // printArray(a);
    10. Arrays.sort(a); //数组进行自动排序
    11. System.out.println(Arrays.toString(a));
    12. }
    13. public static void printArray(int[] a){
    14. for (int i = 0; i < a.length; i++) {
    15. if(i==0){
    16. System.out.print("[");
    17. }
    18. if(i== a.length-1){
    19. System.out.println(a[i]+"]");
    20. }else{
    21. System.out.print(a[i]+", ");
    22. }
    23. }
    24. }
    25. }

    8.冒泡排序

    1. package org.psmaxwell.array;
    2. import java.util.Arrays;
    3. public class ArrayDemo07 {
    4. public static void main(String[] args) {
    5. int[] a = {1,3,5,6,7,3,8,9,22,32,21,88};
    6. int[] sort = sort(a); //调用完我们自己写的排序方法以后,返回一个排序后数组
    7. System.out.println(Arrays.toString(sort));
    8. }
    9. // 冒泡排序
    10. //1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换他们的位置
    11. //2.每一次比较,都会产生一个最大,或者最小数字
    12. //3.下一轮则可以少一次排序
    13. //4.依次循环,直到结束。
    14. public static int[] sort(int[] array){
    15. //临时变量
    16. int temp = 0;
    17. //外层循环,判定我们这个要走多少次?
    18. for (int i = 0; i < array.length-1; i++) {
    19. boolean flag = false; // 通过flag标识位减少没有意义的比较 优化
    20. //内层循环,比价判定两个数,如果第一个数,比第二个数大,则交换位置。
    21. for (int j = 0; j < array.length-1-i; j++) {
    22. if(array[j+1]>array[j]){
    23. temp = array[j];
    24. array[j] = array[j+1];
    25. array[j+1] = temp;
    26. flag = true;
    27. }
    28. }
    29. if(flag==false){
    30. break;
    31. }
    32. }
    33. return array;
    34. }
    35. }

    9.稀疏数组

    1. package org.psmaxwell.array;
    2. public class ArrayDemo08 {
    3. public static void main(String[] args) {
    4. //1.创建一个二维数组 11*11 1:黑棋 2:白棋
    5. int[][] array1 = new int[11][11];
    6. array1[1][2] = 1;
    7. array1[2][3] = 2;
    8. //输出原始数组
    9. System.out.println("输出原始的数组:");
    10. for (int[] ints : array1) {
    11. for (int anInt : ints) {
    12. System.out.print(anInt+"\t");
    13. }
    14. System.out.println();
    15. }
    16. System.out.println("===========================");
    17. //转换为稀疏数组
    18. //获取有效值的个数
    19. int sum = 0;
    20. for (int i = 0; i < 11; i++) {
    21. for (int j = 0; j < 11; j++) {
    22. if(array1[i][j]!=0){
    23. sum++;
    24. }
    25. }
    26. }
    27. System.out.println("有效值的个数:"+sum);
    28. //2.创建一个稀疏数组的数组
    29. int[][] array2 = new int[sum+1][3];
    30. array2[0][0] = 11;
    31. array2[0][1] = 11;
    32. array2[0][2] = sum;
    33. //遍历二维数组,将非零的值,存放稀疏数组中。
    34. int count=0;
    35. for (int i = 0; i < array1.length; i++) {
    36. for (int j = 0; j < array1[i].length; j++) {
    37. if (array1[i][j]!=0){
    38. count++;
    39. array2[count][0] = i;
    40. array2[count][1] = j;
    41. array2[count][2] = array1[i][j];
    42. }
    43. }
    44. }
    45. // 输出稀疏数组
    46. System.out.println("稀疏数组");
    47. for (int i = 0; i < array2.length; i++) {
    48. System.out.println(array2[i][0]+"\t"
    49. +array2[i][1]+"\t"
    50. +array2[i][2]+"\t");
    51. }
    52. System.out.println("===========================");
    53. System.out.println("还原");
    54. //1.读取稀疏数组
    55. int[][] array3 = new int[array2[0][0]][array2[0][1]];
    56. //2.给其中的元素还原它的值
    57. for (int i = 1; i < array2.length; i++) {
    58. array3[array2[i][0]][array2[i][1]] = array2[i][2];
    59. }
    60. //3.打印
    61. System.out.println("输出还原的数组:");
    62. for (int[] ints : array3) {
    63. for (int anInt : ints) {
    64. System.out.print(anInt+"\t");
    65. }
    66. System.out.println();
    67. }
  • 相关阅读:
    开发常用的 Linux 命令知识积累
    WalkMe的数字用户体验到底是啥
    淘宝详情接口调用示例
    存储大实验,游戏A Slower Speed of Light的开发
    辅导技巧-学习笔记
    JAVA入坑之Junit测试与断言
    批量给每一段文字 段落加上符号
    TELEC认证标准是什么?
    Java线程发生IO阻塞时的线程状态
    李宏毅2023机器学习作业HW06解析和代码分享
  • 原文地址:https://blog.csdn.net/u011868279/article/details/126296375