数组的定义

数组是多个相同数据类型按一定的顺序排列的集合 并使用一个名字命名,并通过编号的方式对这些数据进行统一管理

1. 数组的常见概念

  1. 数组名
  2. 下标/索引
  3. 元素
  4. 长度

    2. 数组的特点

  5. 数组是有序的排列

  6. 数组属于引用数据类型变量,数组元素可以是普通数据类型,也可以是引用数据类型
  7. 数组对象会在内存空间中开辟一段连续的空间
  8. 数组长度固定后不能修改

    3. 数组的分类

  9. 数组维度:一维数组 二维数组

  10. 数组类型:基本数据类型数组 引用数据类型数组

    4. 数组的使用

  11. 数组的申明和初始化

  12. 调用数组指定索引位置的元素
  13. 获取数组的长度
  14. 数组的遍历
  15. 数组默认的初始化值
  16. 数组的内存解析
    1. public static void main(String[] args) {
    2. //1.数组的初始化和赋值
    3. //方式一 静态初始化 初始化和元素赋值一起进行
    4. int[] ids;
    5. ids = new int[]{1001, 1002, 1003, 1004};
    6. //方式二 动态初始化 初始化和元素赋值分开进行
    7. String[] names = new String[5];
    8. //2.调用数组指定位置的元素
    9. System.out.println(ids[1]); //1002
    10. //数组元素赋值
    11. names[0] = "xue";
    12. names[1] = "dong";
    13. names[2] = "zhi";
    14. //3. 数组的遍历
    15. for (int i = 0; i < names.length; i++) {
    16. System.out.println(names[i]);
    17. }
    18. //4. 数组长度获取 names.length
    19. //5。数组的默认初始化值
    20. //基本数据类型 int 0 boolean false
    21. //引用数据类型 null
    22. }

    jvm 栈 stack (局部变量) 堆 heap (new 的引用数据类型) 方法区
    1.常量池 (字符串常量) 2.静态域

5 二维数组的使用

  1. 初始化方式一:
    1. String[][] names = new String[5][4];
    2. 访问外曾元素 names[0] 显示地址值
    3. 访问内曾元素 names[0][0] 和一维数组一样默认值
  2. 初始化方式二:

    1. String[][] names = new String[5][];
    2. 访问外曾元素 names[0] 显示null
    3. 访问内曾元素 names[0][0] 显示空指针异常

      6 练习

      1. 杨辉三角

      1. public static void main(String[] args) {
      2. //杨辉三角
      3. //1.初始化二维数组
      4. int[][] yanghui = new int[10][];
      5. //2.二维数组赋值
      6. for (int i = 0; i < yanghui.length; i++) {
      7. yanghui[i] = new int[i + 1];
      8. yanghui[i][0] = yanghui[i][i] = 1;
      9. for (int j = 1; j < yanghui[i].length-1; j++) {
      10. yanghui[i][j] = yanghui[i-1][j-1] + yanghui[i-1][j];
      11. }
      12. }
      13. //3.遍历二维数组
      14. for (int i = 0; i < yanghui.length; i++) {
      15. for (int j = 0; j < yanghui[i].length; j++) {
      16. System.out.print(yanghui[i][j]+" ");
      17. }
      18. System.out.println();
      19. }
      20. }

      2. 数组反转

      1. public static void main(String[] args) {
      2. //数组顺序反转
      3. String[] mystr = new String[]{"aa","bb","cc","dd","ee"};
      4. for (int i = 0; i < mystr.length; i++) {
      5. System.out.print(mystr[i]+" ");
      6. }
      7. System.out.println("");
      8. for (int i = 0; i < mystr.length / 2; i++) {
      9. String temp = mystr[i];
      10. mystr[i] = mystr[mystr.length-1];
      11. mystr[mystr.length-1] = temp;
      12. }
      13. for (int i = 0; i < mystr.length; i++) {
      14. System.out.print(mystr[i]+" ");
      15. }
      16. }

      3. 线性查找

      1. public static void main(String[] args) {
      2. //线性查找
      3. String[] mystr = new String[]{"aa", "bb", "cc", "dd", "ee"};
      4. boolean fleg = false;
      5. String targ = "cc";
      6. for (int i = 0; i < mystr.length; i++) {
      7. if (targ.equals(mystr[i])) {
      8. fleg = true;
      9. System.out.println("find it positon: "+i);
      10. break;
      11. }
      12. }
      13. if (!fleg) {
      14. System.out.println("find nothing");
      15. }
      16. }

      4. 二分查找

      1. public static void main(String[] args) {
      2. //线性查找 前提:有序
      3. int[] myint = new int[]{1, 4, 66, 88, 90, 100, 333};
      4. int dest = 66;
      5. boolean isfleg = false;
      6. int start = 0;
      7. int end = myint.length - 1;
      8. while (start <= end) {
      9. int middle = (start + end) / 2;
      10. if (dest == myint[middle]) {
      11. System.out.println("找到啦位置是:" + middle);
      12. isfleg = true;
      13. break;
      14. }else if (dest > myint[middle]){
      15. start = middle+1;
      16. }else{
      17. end = middle-1;
      18. }
      19. }
      20. if (!isfleg){
      21. System.out.println("未找到");
      22. }
      23. }

      5. 排序 (算法的一种)

      1. 排序分类
  3. 快速排序

  4. 插入排序
  5. 冒泡排序

    1. public static void main(String[] args) {
    2. //冒泡排序
    3. int[] myint = new int[]{1, 88, 4, 199, 66, 5, 90, 999, 100, 3};
    4. for (int i = 0; i < myint.length - 1; i++) {
    5. for (int j = 0; j < myint.length - 1 - i; j++) {
    6. if (myint[j] > myint[j+1]) {
    7. int temp = myint[j];
    8. myint[j] = myint[j+1];
    9. myint[j+1] = temp;
    10. }
    11. }
    12. }
    13. for (int i = 0; i < myint.length; i++) {
    14. System.out.print(myint[i]+" ");
    15. }
    16. }
  6. 递归排序

  7. 选择排序
  8. 基数排序
  9. 桶式排序

    2. 算法特征
  10. 输入

  11. 输出
  12. 有穷性
  13. 可行性
  14. 确定性

    7. 数组工具类Arrays

    1. 常用方法

  15. equals

  16. toString
  17. fill
  18. binarySearch

    1. public static void main(String[] args) {
    2. //Arrays 工具类
    3. int[] myint = new int[]{1,19,40,3,24,500,26};
    4. int[] myint2 = new int[]{26,19,40,3,24,500,1};
    5. //1.Arrays.equals
    6. boolean equals = Arrays.equals(myint, myint2);
    7. System.out.println(equals);
    8. //2.Arrays.toString
    9. String s = Arrays.toString(myint);
    10. System.out.println(s);
    11. //3.Arrays.binarySearch 二分查找
    12. int i = Arrays.binarySearch(myint2, 24);
    13. System.out.println(i);
    14. //4.Arrays.sort 排序
    15. Arrays.sort(myint);
    16. String s2 = Arrays.toString(myint);
    17. System.out.println(s2);
    18. //4.
    19. int[] myint3 = new int[5];
    20. Arrays.fill(myint3,1);
    21. System.out.println(Arrays.toString(myint3));
    22. }

    2. 常见的异常

  19. 数组角标越界

  20. 空指针异常