Java
大约 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循环语句不能自动处理二维数组的每一个元素,需要使用两个嵌套的循环
不规则数组
即数组每一行都有不同的长度