zoukankan      html  css  js  c++  java
  • java笔记 -- 数组

    概念:

    • 数组是一种数据结构, 用来存储同一类型值的集合.
    • 通过一个整型的下标可以访问数组中的每一个值.
    • 声明:

    int[] a(推荐,将类型int[](整形数组)和变量名分开了) 或者int a[]

    • 赋值:

    int[] a = new int[100]; // 创建一个可以存储100个整数的数组,下标是1-99
    int[] a = new int[n]; // 100可以是变量n.

    • 初始化:

    数字数组: 所有元素初始化为0;
    boolean数组: 所有元素初始化为false;
    对象数组: 所有元素初始化为null; // String[] names = new String[10];

    int smallPrimes = {2, 3, 5, 7}; // 可在创建的时候直接赋值.
    new int[] {1, 4, 6, 8}; // 可以初始化一个匿名数组.
    smallPrimes = new int[] {1, 4, 6, 8}; // 可以在不创建新变量的时候重新初始化一个数组.

    taps:
      Java中允许数组长度为0. ---> new int[0]; // 创建新的长度为0的空数组

    • 获取数组长度:

    a.length;

    • for each:

    使用: 不需要使用下标的循环, 只关注元素本身.
    for (variable : collection) statement
      例: for (int element : a)
        System.out.println(element);

    • 打印数组:

    1. 循环打印a[i]
    2. Arrays.toString(a)
    注意: 不可直接打印a, 打印出来的是地址?

    • 数组拷贝:

    用=赋值的新变量与原数组变量引用了同一个地址, 更改一个, 另外一个也会改变.
    可以用Arrays.copyOf方法拷贝到一个新数组中:
      int b = Arrays.copyOf(a, length);
      length是新数组b的长度:  如果小于a.length, 只拷贝a中前length个元素.
                : 如果大于a.length, 那么多余的元素会根据数组类型相应的被初始化为0 或 false, 或null

    • 数组排序:

    Arrays.sort(a);

    数组API:

    java.util.Arrays:

    • static String toString(type[] a);

    返回包含a中数据元素的字符串, 这个数据元素被放在括号内, 并用逗号分开.
    参数a, 类型为int, long, short, char, byte, boolean, float, double的数组.

    • static type copyOf(type[] a, int length)
    • static type copyOf(type[] a, int start, int end)

    拷贝0-length个元素或者start-end下标的元素

    • static void sort(type[] a);

    采用优化的快速排序算法对数组进行排序.
    参数a, 类型为int, long, short, char, byte, boolean, float, double的数组.

    • static int binarySearch(type[] a, type v)
    • static int binarySearch(type[] a, int start, int end, type v)

    用二分法搜索算法查找值v. 如果查找成功, 则返回相应的下标值; 否则, 返回一个负数值r.
    -r-1是为保持a有序v应插入的位置.
    参数a, 类型为int, long, short, char, byte, boolean, float, double的数组.
    v 同a的数据元素类型相同的值.

    • static boolean equals(type[] a, type[] b)

    如果两个数组大小相同, 并且下标相同的元素都对应相等, 返回true.
    参数a, b, 类型为int, long, short, char, byte, boolean, float, double的两个数组.

    多维数组:
    声明:
      double[][] balance;
      balance = new double[NYEARS][NRATES];
      int[][] b =
      {
        {1, 2, 3,4},
        {11, 22, 33,44},
        {12, 23, 34,45},
        {16, 27, 38,49},
      };
      处理多维数组需要用多层循环嵌套
      打印多维数组:
      1.循环打印;
      2.Arrays.deepToString(a);

    package com.picc.sample.arraysample;
    import java.util.Arrays;
    
    // 多维数组示例:
    public class ArrayNote {
        public static void main(String[] args) {
            final double STARTRATE = 10;
            final int NRATES = 6;
            final int NYEARS = 10;
            
            double[] interestRate = new double[NRATES]; // Arrays.toString(interestRate) --> [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
            for (int j = 0; j < interestRate.length; j++)
                interestRate[j] = (STARTRATE + j) / 100.0;
    //        System.out.println(Arrays.toString(interestRate));
            
            double[][] balances = new double[NYEARS][NRATES];
    //        System.out.println(Arrays.deepToString(balances));
            
            // set initial balances to 1000
            for (int j = 0; j < balances[0].length; j++)
                balances[0][j] = 10000;
            
            // compute interest for future years
            for (int i = 1; i<balances.length; i++) {
                for (int j = 0; j < balances[i].length; j++) {
                    double oldBalance = balances[i - 1][j];
                    double interest = oldBalance * interestRate[j];
                    balances[i][j] = oldBalance + interest;
                }
            }
            
            for (int j = 0; j < interestRate.length; j++)
                System.out.printf("%9.0f%%", 100 * interestRate[j]);
            
            System.out.println();
            for (double[] row : balances) {
                for (double b : row)
                    System.out.printf("%10.2f", b);
                System.out.println();
            }
        }
    }

    运行结果:

      10%   11%     12%    13%    14%     15%
    10000.00 10000.00 10000.00 10000.00 10000.00 10000.00
    11000.00 11100.00 11200.00 11300.00 11400.00 11500.00
    12100.00 12321.00 12544.00 12769.00 12996.00 13225.00
    13310.00 13676.31 14049.28 14428.97 14815.44 15208.75
    14641.00 15180.70 15735.19 16304.74 16889.60 17490.06
    16105.10 16850.58 17623.42 18424.35 19254.15 20113.57
    17715.61 18704.15 19738.23 20819.52 21949.73 23130.61
    19487.17 20761.60 22106.81 23526.05 25022.69 26600.20
    21435.89 23045.38 24759.63 26584.44 28525.86 30590.23
    23579.48 25580.37 27730.79 30040.42 32519.49 35178.76

     

    package com.picc.sample.arraysample;

    import java.util.Arrays;
    import java.util.Scanner;
    
    // 输出输出, 数组方法
    public class LotterDrawing {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            
            System.out.println("How many numbers do you need to draw");
            int k = in.nextInt();
    
            System.out.println("How many numbers do you need to draw");
            int n = in.nextInt();
            
            int[] numbers = new int[n];
            for (int i = 0; i < numbers.length; i++)
                numbers[i] = i + 1;
            
            int[] result = new int[k];
            
            for (int i = 0; i < result.length; i++) {
                int r= (int) (Math.random() * n);
                result[i] = numbers[r];
                numbers[r] = numbers[n - 1];
                n--;
            }
            
            Arrays.sort(result);
            
            // 两种打印方法
    //        System.out.println(Arrays.toString(result));
            for (int r: result)
                System.out.print(r + ", ");
        }
    }

    运行示例:

    How many numbers do you need to draw
    5
    How many numbers do you need to draw
    20
    1, 4, 5, 9, 13,



  • 相关阅读:
    【第40套模拟题】【noip2011_mayan】解题报告【map】【数论】【dfs】
    【模拟题(63550802...)】解题报告【贪心】【拓扑排序】【找规律】【树相关】
    【模拟题(电子科大MaxKU)】解题报告【树形问题】【矩阵乘法】【快速幂】【数论】
    IMemoryBufferReference and IMemoryBufferByteAccess
    SoftwareBitmap and BitmapEncoder in Windows.Graphics.Imaging Namespace
    Windows UPnP APIs
    编译Android技术总结
    Windows函数转发器
    Two Ways in Delphi to Get IP Address on Android
    Delphi Call getifaddrs and freeifaddrs on Android
  • 原文地址:https://www.cnblogs.com/qiezuimh/p/9713427.html
Copyright © 2011-2022 走看看