数组
数组是一种顺序表, 它是组织和处理数据的一种常见方式, 可以使用索引下标进行快速定位并获取指定位置的元素,数组的下标从0 开始, 这源于 BCPL 语言,它将指针设置在0 的位置,用数组下标作为直接偏移量进行计算. 在java 体系中, 数组用以存储同一类型的对象, 一旦分配内存后 则无法扩容.
- 声明数组和赋值的方式示例:
// 初始化完成, 容量的大小即等于大括号内元素的个数,使用频率并不高
String[] args3 = {
"a","b"};
String[] args4 = new String[2];
args4[0] = "a";
args4[1] = "b";
上述源码中的args3 是静态初始化, 而 args4 是动态初始化. 无论静态初始化还是动态初始化, 数组是固定容量大小的. 对于动态数组,集合提供了 Vector 和 ArrayList 两个类, 前者是线程安全的,性能较差, 基本弃用,而后者是线程不安全的,使用频率最高的集合之一.
- 数组的遍历
-
优先推荐JDK5 引进的 foreach 方式, 即
for(元素 : 数组名)
的方式, 可以在不使用下标的情况下遍历数组. -
使用数组下标方式遍历:
for (int = 0; i < array.length; i++){
}
- JDK8的函数式接口进行遍历:
Arrays.asList(args3).stream().forEach(x -> System.out.println(x));
Arrays.asList(args3).stream().forEach(System.out :: println);
Arrays 是针对数组对象进行操作的工具类, 包括数组的排序、查找、对比、拷贝等操作。尤其是排序,在多个JDK版本中再不断的进化,比如原来的归并排序改成Timsort(详见元素的比较) ,明显改善了集合排序性能。 另外,通过这个工具类也可以把数组转成集合(Arrays.asList())。
集合
数组和集合都是用来存储对象的容器,前者性质单一,方便易用;后者类型安全,功能强大,且两者之间必然有互相转换的方式。
转换的方式分为两种情况: 数组转集合和集合转数组。在数组转集合的过程中,注意是否使用了视图方式直接返回数组中的数据。
以 Arrays.asList() 为例,它把数组转换成集合时,不能使用其修改集合相关的方法,如使用它的 add/remove/clear 方法会抛出UnsupportedOperationException 异常. 示例源码如下:
public class ArraysAsList {
public static void main(String[] args) {
String[] stringArray = new String[3];
stringArray[0] = "one";
stringArray