数组
优点:
1、按照索引查询元素速度快
2、按照索引遍历数组方便
3、能存储大量数据
缺点:
1、根据内容查找元素速度慢
2、数组大小必须定义时给出,一经确定不能改变。
3、数组中所有元素类型必须相同
4、增加、删除元素效率慢
5、数组的空间必须是连续的,这就造成数组在内存中分配空间时必须找到一块连续的内存空间。所以数组不可能定义得太大,因为内存中不可能有那么多大的连续的内存空间,而解决这个问题的方法就是使用链表。
- 一个数组只能存储一种数据类型的数据
- 一旦数组初始化完成,数组在内存中所占的空间将被固定下来,因此数组长度不可变。即使把某个数组元素的数据清空,它所占的空间依然被保留,数组的长度依然不变。
所以在做算法题时,关于数组的判空需要这样判断:if (array == null && array.length == 0)
字符串的判空:if (str == null && str.length() == 0) - 数组也是一种数据类型,它本身是一种引用类型。例如 int 是一种基本类型,int a = 1 ;int [ ] 是一种引用类型,int [ ] b = {1,3,2};
- 数组的初始化
java语言中数组必须先初始化才可使用。初始化就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值。
1. 静态初始化
int [ ] a = {1,2,3};2. 动态初始化
int [ ] b = new int [5]; // 5代表数组的长度length,系统分配初始值
b[0] = 123 ; b[1] = 456 ; b[2] = 789 …
- 遍历数组(两种方式)
① 用 foreach 循环遍历数组:
for (type variableName : array){
//variableName自动迭代访问每个元素
}
String[] books = new String[3];
books[0] = "疯狂j
books[1] = "深入理解jvm";编程之美";
for (String book : books){
System.out.println(book);
}
/* 输出结果为:疯
深入理解jvm
java并发 */
② 用 Arrays 工具类的 toString 方法将数组转换成字符串
System.out.println(Arrays.toString(books));
// 输出结果为:[疯狂java讲义, 深入理解jvm, java并发编程之美]
- 内存中的数组 定义并初始化一个数组后,在内存中分配了两个内存空间:栈内存用于存放数组的引用变量,堆内存用于存放数组本身。