• CoreJava学习第四课-数组


    一:数组

    1.什么是数组?

    ​     数组就是 一次性定义多个同类型的变量

    2.在内存中,数组元素是连续存储的

    ​     优点:快速查询到某个数组元素,查询效率高 (下标从0开始计数,提高计算地址的效率)

    ​     缺点:1.插入和删除效率低 2.数组的长度是固定的 ---------->所以需要数组扩容,见7.数组扩容

    3.声明,使用数组【重要】

    声明数组: int[] a    int a[]    int []a
    ​
    为数组分配空间:  a = new int[10]; 
                    a = new int[]{1,2,5,4,2,6,8,3,4};  显式初始化 直接为数组元素赋值 
    注意:定义数组后直接使用可以这样写。
    int[] a = new int[]{1,2,3,4,5,6} 等价于 int[] a = {1,2,3,4,5,6}

    4.数组遍历

    ​    现阶段用 for循环遍历 ,后面会学到更多的遍历方式!

    for(int i = 0;i < array.length;i++){
       System.out.println(arrsy[i]);
    }

    5,数组元素默认值

    ​     每个数组元素都会赋予默认值 (数值类型 0 布尔类型 false 对象类型 null)

    6.数组长度

    ​     数组元素: 数组名[下标] 下标范围: 0 - 数组长度-1

         数组长度: 数组名.length

    7.数组扩容

    ​ 注意:数组变量中存储的是数组的地址,不是数组本身

    ​ 变量中存储的是数据在内存中的地址,除8种基本数据类型是存储数据的值。

     int[] a = {1,2,3,4,5};//定义一个数组a,长度为5
            System.out.println(a.length);//5
    ​
            //第1种扩容     
            int[] b = new int[a.length *2 ];
            for(int i = 0 ; i < a.length ; i++){
                b[i] = a[i];
            }
            
            //第2种扩容
            /*System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 
              从指定源数组中复制一个数组,复制从指定的位置开始,到目标数组的指定位置结束。*/
            int[] b = new int[a.length*2];//先定义一个数组b,长度为数组a的2倍
            //需要5个数据(被扩容数组,从第几个元素开始复制,新数组,从第几个元素开始复制,复制多少数据)
            System.arraycopy(a,0,b,0,a.length);
            a = b; 
    ​
            //第3种扩容 (since JDK 1.6)
            //用Oracle公司提供的函数扩容,直接定义一个新数组,用于扩容
            int[] b = java.util.Arrays.copyOf(a, a.length*2 );//(被扩容的数组,扩容后的长度)
            a = b ; 

    二:数组排序

    1.冒泡排序法

    冒泡排序法: 每次相邻的元素比较 , 每次找出最大的数
              0  1  2  3  4  5
              2  1  4  9  7  5                 a.length=n=6        i=0;i<n-1 i++
    j j+1
    0-1       1  2  4  9  7  5
    1-2       1  2  4  9  7  5
    2-3       1  2  4  9  7  5                 i=0            j=0;j<5;j++      
    3-4       1  2  4  7  9  5    
    4-5       1  2  4  7  5  9
    ​
    0-1       1  2  4  7  5
    1-2       1  2  4  7  5                    i=1            j=0;j<4;j++
    2-3       1  2  4  7  5
    3-4       1  2  4  5  7                                                          j=0;j<n-1-i;j++
    ​
    0-1                                        i=2            j=0;j<3;j++
    1-2
    2-3
    ​
    0-1                                        i=3            j=0;j<2;j++
    1-2
    ​
    0-1                                        i=4            j=0;j<1;j++
        代码实现:
        for(int i = 0 ; i < a.length-1 ; i++){
                for(int j = 0 ; j < a.length-1-i; j++){
                    if (a[j] > a[j+1]){
                        int t = a[j];
                        a[j] = a[j+1];
                        a[j+1] = t;
                    }
                }
            }   

    2.选择排序法

    选择排序法: 每次由最左边的元素和剩余所有元素比较   每次找出最小的数
            0   1   2   3   4   5
            8   3   4   2   7   1
                                              for(int i = 0 ; i < n-1 ; i++) 
    i j 
    0-1     3   8   4   2   7   1
    0-2     3   8   4   2   7   1
    0-3     2   8   4   3   7   1             i=0       j=1;j<6;j++
    0-4     2   8   4   3   7   1
    0-5     1   8   4   3   7   2
    ​
    1-2         4   8   3   7   2
    1-3         3   8   4   7   2             i=1       j=2;j<6;j++               j=i+1; j<n;j++
    1-4         3   8   4   7   2
    1-5         2   8   4   7   3
    ​
    2-3             4   8   7   3
    2-4             4   8   7   3             i=2       j=3;j<6;j++
    2-5             3   8   7   4
    ​
    3-4                 7   8   4             i=3       j=4;j<6;j++
    3-5                 4   8   7
    ​
    4-5                     7   8             i=4       j=5;j<6;j++
        代码实现:
        for(int i = 0 ; i < a.length-1 ; i++){
                for(int j = i+1 ; j < a.length ; j++){
                    if (a[i] > a[j]){
                        int t= a[i];
                        a[i] = a[j];
                        a[j] = t;
                    }
                }
            }

    3.快速排序 --- 调用JDK提供的排序方式!

    java.util.Arrays.sort(数组名);

    4.二维数组

         二维数组实际上是一维数组的一维数组,可以理解成在一个一维数组里又存了一个一维数组。

         在内存中,一维数组存另一个一维数组的引用 。

    public static void main(String[] args){
            //int[][] a = new int[4][3]; 
            /*
            int[][] a = new int[4][];   // int[][] a = new int[][3];error!
            a[0] = new int[4];
            a[1] = new int[5];
            a[2] = new int[3];
            a[3] = new int[6];
            */
            
            int[][] a = {{1,2,3,4},{5,6,7,8,9},{1,1,1},{0,0,0,0}};
            
            //遍历a数组
            for(int i = 0 ; i < a.length ; i++){
                // 遍历a[i]数组
                for(int j = 0 ; j < a[i].length ; j++){
                    System.out.print("a["+i+"]["+j+"]="+a[i][j]+"	");
                }
                System.out.println();           
            }
        }

    
     
  • 相关阅读:
    浏览器缓存之灾
    js控制页面带参跳转
    解决 iOS7 通过tag 找不到 UITableViewCell 的子控件(转)
    Xcode工程添加第三方文件的详细分析 Create folder references for any added folders(转)
    iOS开发 frame 与 bounds 的区别与关系 转自隔叶黄莺
    关于UIGestureRecognizerState
    iOS 开发,工程中混合使用 ARC 和非ARC(转)
    iOS使用NSURLConnection发送同步和异步HTTP Request
    关于error:Cannot assign to 'self' outside of a method in the init family
    ios学习之UIWebView网页视图调整
  • 原文地址:https://www.cnblogs.com/chenpeisong/p/9775220.html
Copyright © 2020-2023  润新知