Java中 Array、Arrays与ArrayList类
一、Array类
public final class Array extends Object
Array 类提供了动态创建和访问 Java 数组的方法。
数组一旦确定,长度不可改变
数组与其他容器之间的区别在三个方面
- 效率
- 类型
- 保存基本类型的能力
在Java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。
数组就是一个简单的线性序列,这使得元素访问十分快速。但是为这种速度付出的代价就是数组对象的大小被固定。并且在生命周期类不可改变。
Array 允许在执行 get 或 set 操作期间进行扩展转换;
但如果发生收缩转换,则抛出 IllegalArgumentException。
private static void useArray() {
Person[] people = new Person[3];
people[0] = new Person(15, "Bob");
people[1] = new Person(18, "Peter");
people[2] = new Person(20, "Tom");
for(int i =0 ; i< people.length ;i++){
System.out.println(people[i]);
}
//output*
// Person{age=15, name='Bob'}
// Person{age=18, name='Peter'}
// Person{age=20, name='Tom'}
}
二、ArrayList类
public class ArrayList extends AbstractList
implements List, RandomAccess, Cloneable, SerializableList
简单来看,ArrayList可以视作“可以自动扩充自身尺寸的数组”。
Arraylist的使用:创建一个实例,用add()插入对象;用get()访问这些对象,还能够通过size() 知道有多少个元素添加了进来
ArrayList,可以不断的将新的实例化对象放入ArrayList中,从而实现更多空间的自动分配。尽管通常应该使用ArrayLis而不是使用数组,但是这种弹性确实需要额外的开销,因此,通常ArrayList的效率要比 Array类低。
private static void useArrayList() {
Person bob = new Person(15, "Bob");
Person peter = new Person(18, "Peter");
Person tom = new Person(20, "Tom");
ArrayList<Person> people = new ArrayList<>();
people.add(bob);
people.add(peter);
people.add(tom);
System.out.println(people.get(1));
//output* Person{age=18, name='Peter'}
for(int i = 0 ; i<people.size() ; i++){
System.out.println( people.get(i) ) ;
}
//output*
// Person{age=15, name='Bob'}
// Person{age=18, name='Peter'}
// Person{age=20, name='Tom'}
}
三、Arrays类
public class Arrays extends Object
此类包含用来操作数组(比如排序和搜索)的各种方法。
此类还包含一个允许将数组作为列表来查看的静态工厂。
除非特别注明,否则如果指定数组引用为 null,则此类中的方法都会抛出 NullPointerException。
此类中所含方法的文档都包括对实现 的简短描述。应该将这些描述视为实现注意事项,而不应将它们视为规范 的一部分。实现者应该可以随意替代其他算法,只要遵循规范本身即可。
(例如,sort(Object[]) 使用的算法不必是一个合并排序算法,但它必须是稳定的。)