Different
大约 2 分钟
Different
目录
容器类型
定义
数组定义
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}; // 大括号初始化
Python的定义
定义
可以使用列表解析,非常方便
高级数组
普通数组的区别
C
// C需要一开始就确定数组的大小 int[] list_i = int[100]
Java
// 在Java中,它允许在运行时确定数组的大小 // 缺点:一旦确定了数组的大小,改变它就不太容易了 int actualSize = ...; Employee[] staff = new Employee[actualSize];
泛型变成数组
Java
ArrayList:泛型变长数组
ArrayList<Employee> staff = new ArrayList<Employee>(); ArrayList<Employee> staff = new ArrayList<>(); // Java SE 7,“菱形”语法
C++
Array:泛型定长数组
#include <array> std::array <typeName, N_ELEM> arr;
Vector等:泛型变长数组
#include <vector> std::vector<doubel> vd(n);
区别补充
- ArrayList类似于C++的vector模板。ArrayList与vector都是泛型类型。 但是C++的vector模板为了便于访问元素重载了[]运算符。由于Java没有运算符重载,所以必须调用显式的方法
- 此外,C++向量是值拷贝。如果a和b是两个向量,赋值操作a=b将会构造一个与b长度相同的新向量a,并将所有的元素由b拷贝到a,而在Java中,这条赋值语句的操作结果是让a和b引用同一个数组列表