Java集合框架(三)--List理解
来源:互联网 发布:php trim 弱等于 编辑:程序博客网 时间:2024/06/05 15:21
List是由根接口Collection派生出的子接口。
特点:是个有序集合,元素可重复。
这个接口应该是Collection用多比较多的一个子接口了吧,基本上涉及到数据库的查询都是用List来存储数据的。因为将数据库查出来的每条记录都映射成一个对象后用List存储每个对象元素操作起来真的是方便。List的size()就是获取该集合中元素的个数,也就是存储了对象的个数。一个对象对应数据库查询的一条记录,那查询一个表也不过是多个对象而已,用一个List去存储再适合不过。
不过实际上应用操作的都是List的实现类
//获取学生表全部记录List<Student> list = StuDao.selectAll();
就像这个list实际是赋值方法的返回值,得到的都是ArrayList,然后调用的自然也是实现类的具体方法。
ArrayList是个数组线性表,就是可以类似数组的形式存储。所以它的随机访问速度极快。但缺点自然就是不适合频繁的进行插入删除操作,因为每次操作都要移动数组中的所有元素。可以将ArrayList理解为是基于数组的一个线性表。但是这个数组的长度是可以动态改变的。
Vector也是List类的典型实现。Vector和ArrayList都是基于数组实现的List类,所以都封装了一个动态再分配的Object[]数组。每个ArrayList或Vector对象有一个capacity属性,这个capacity表示它们所封装的Object[]数组的长度。当向ArrayList或Vector添加元素时,它们的capacity会自动增加。
ArrayList和Vector显著区别是ArrayL是线程不安全的,当多条线程访问同一个ArrayList集合时,必须手动设置才能保证该集合的同步性。
Vector是线程安全的,所以Vector的性能比ArrayList性能低。
当需要保证LIst集合线程安全也不推荐Vector,Collections(不是接口Collection)工具类可以将ArrayList变成线程安全的。
Vector还提供了一个Stack种类,是用于模拟“栈”这种数据结构。
最后List还有一个LinkedList实现类,是一个基于链表实现的List类,对于顺序访问集合中的元素进行了优化,插入删除操作速度非常快。因为LinkedList同时实现List接口和Deque(双向队列)接口