跳至主要內容

Java

LincZero大约 2 分钟

Java

目录

容器类型

数组

定义

与C/C++不同:数组定义

  • Java可以使用两种风格的定义方式

    • 区别

      • 数组长度不要求是常量
      • 创建一个数字数组时,所有元素都初始化为0;创建一个包含10个字符串的数组,所有字符串都为null,如果希望全是空串则循环填充
    • 定义

      int[] a;					// 风格1,Java风格,将类型和变量名分开了,更受Java程序员的喜爱
      int a[];					// 风格2,C风格
      int[] a = new int[100];		// new
      
      new int[] {1,2,3,4};		// 初始化一个匿名的数组,自动计数
      int[] a = new int[] {1,2,3};// 可以在不创建新变量的情况下重新初始化一个数组
      int[] a = {1,2,3,4};		// 简写形式
      
  • Cpp的定义

    • 区别

      • 数组长度要求是常量(stl中的vector等类则支持变长)
      • 需要= {0}自动填补后,所有元素才会初始化为0,否则内存随机、非常危险
    • 定义

      int a[4] = {1,2,3};			// 一般方法 + 自动填补
      int a[] = {1,2,3,4};		// 自动计数
      int a {1,2,3,4};			// 大括号初始化
      

补充:

在Java中,允许数组长度为0。在编写一个结果为数组的方法时,如果碰巧结果为空,则这种语法形式就显得非常有用。此时可以创建一个长度为0的数组

注意,数组长度为0与null不同。

方法

Arrays.copyOf 拷贝数组

API: java.util.Arrays 1.2

如果直接拷贝赋值,则结果是拷贝的地址

若需要拷贝值,则需要使用Arrays类的copyOf方法

int [] copiedNumbers = Arrays.copyOf(numbers, numbers.length);
// 如果第二个参数比第一个参数的长度更大,则多余的元素被赋值为0/false/null
// 如果第二个参数比第一个参数的长度更小,则截断

Arrays.sort 排序

API: java.util.Arrays 1.2

用的是快速排序算法

int[] a = new int[10000];
// ...
Arrays.sort(a);

多维数组

和C/C++相似,没有多维数组,只有一维数组。多维数组被解释为“数组的数组。”

使用多个下标访问数组元素,它适用于表示表格或更加复杂的排列形式

double[][] balances;
balances = new double[x][y];	// x行y列,double是一个包含x个指针的数组,每个元素再包含y个元素
int[][] magicSquare =
{
    {1.2.3.4},
    {5,6,7,8}
}

for each循环语句不能自动处理二维数组的每一个元素,需要使用两个嵌套的循环

不规则数组

即数组每一行都有不同的长度