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,



  • 相关阅读:
    python 多进程-03 进程池
    python 多进程-02 进程间数据共享
    python 多进程-01 基本使用
    python 多线程-02 线程池
    开发者入驻
    小程序组件 scroll-view 下拉加载更多,触底触发事件,容器高度设置
    Array.from在360浏览器和IE浏览器兼容问题
    获取cookie
    背景图左右居中
    uniapp使用uni.setStorageAsync刷新页面数据丢失问题
  • 原文地址:https://www.cnblogs.com/qiezuimh/p/9713427.html
Copyright © 2011-2022 走看看