引入
在开发过程中我们难免要对数据进行存储,这时我们可以考虑的容器有数组和集合,这就需要我们区别二者的功能,选择合适的容器。
数组在储存数据方面的特点:
1)数组一旦初始化,其长度就是确定的。
2)数组一旦初始化完成,其元素类型就是确定的,不是此类型的元素不能添加到数组中。
3)数组的元素类型既可以是基本数据类型也可以是引用数据类型。
数组的缺点
1)数组中储存数据具有单一性的特点,对于无序的,不可重复的场景的多个数据就无能为力了。
2)数组中可用的方法,属性都极少。具体的需求都需要自己组织代码的相关逻辑。
3)针对于数组中元素的删除,插入操作,性能较差。
java中集合框架的体系
java中有两个根接口Collection和Map,由这两个接口派生出来了许多接口,不同的接口都有着自己的有特点
这里主要介绍一些较为常用的接口:分别是由Collection派生出来的List接口和Map接口;
List集合框架
List接口的实现类有ArrayList以及其子类LinkedList,Vector
ArrayList容器的使用
说明:
ArrayList是一个动态数组,也是我们最常用的集合,是List类的典型实现。它允许任何符合规则的元素插入甚至包括null,每一个ArrayList都有一个初始容量(10),该容量代表了数组的大小。
随着容器中的元素不断增加,容器的大小也会随着增加,在每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。
LinkedList与ArrayList的功能相同,但在执行不同的操作时二者的性能不同,ArrayList底层使用的是Object数组,而LinkedList使用的是双向链表这就使得LinkedList在插入和删除操作时有很好的性能,相对的其在查找元素时性能就较差。对于ArrayList来说,由于其底层使用的是Object数组,而数组的一大特点就是有索引【index】使得ArrayList在进行查找时性能相对较好,而在插入和删除方面性能较差。
Vector是一个较为古老的实现类,其与ArrayList相比性能较差但是其线程是安全的,而ArrayList线程不安全的。
总结:
1)ArrayList
优点:底层结构是数组,查询快,效率高。
缺点:线程不安全,增删慢。
2)Vector
古老的List实现类
优点:底层结构是数组,查询快,效率高。
缺点:线程不安全,增删慢。
3)LinkedList
优点:底层数据结构是双向链表,增删快,效率高;
缺点:线程不安全,查询慢;
拓展【List类中的方法及介绍】
返回容器的元素个数;
判断容器是否为空;
判断容器是否包含某个元素;
用于创建迭代器的实现类的对象
用于将容器转换为数组;
用于增删容器中的元素
清空容器中的元素
在指定的索引处修改或者增加元素