集合(容器)
一,集合的引入
集合和数组相似点:都可以储存多个对象,对外作为一个整体存在。
数组的缺点:长度初始化时指定,大小固定。数组采用连续储存空间,删除和添加效率低下。数组无法保存映射关系。数组缺乏封装,操作繁琐。
Collection接口储存一组不唯一,无序的对象。
List接口储存一组不唯一,有序(索引顺序)的对象。
Set接口储存一组不唯一,无序的对象。
Map接口储存一组键值对象,提供key到value的映射。key唯一 无序,value 不唯一 无序。
二,List(有序 不唯一 可重复)
1,ArrayList线性表中的顺序表。在内存中分配连续的空间,实现长度可变的数组。
优点:遍历元素和随机访问元素效率比较高。
缺点:添加和删除需要大量的移动元素效率低,按照内容查询效率低。
ArrayList其底层是一维数组。故缺点跟数组相同。
2,LinkedList线性表中双向链表(底层是链表),采用双向链表储存方式。
优点:添加元素和删除元素效率高。
缺点:遍历元素和随机访问元素效率低。
ArrayList与LinkedList缺优点相反,互补不足。
线程不安全的,效率高。
3,Vector的使用与上面2种类似。Vector线程安全的,效率低。底层与ArrayList相同。
三,Set(无序 唯一 不可重复)
1,HashSet采用hashtable哈希表储存结构。
优点:添加元素,删除元素,查询元素快!
缺点:无序。
2,LinkedSet采用哈希表储存,同时使用链表次序。
有序(添加顺序)!
3,TreeSet采用二叉树的储存结构。
优点:有序(按从小到大自动排序) 查询速度比List快(按照内容查询)
缺点:查询速度没有HashSet快。
四,Map(Key-Value映射)
1,HashMap,key无序 唯一,value无序 不唯一。
五,Iterator
所有的集合都为提高相应的遍历方法,而是交给迭代器完成遍历。迭代器为集合而生,专门实现集合的遍历。
Iterator的方法:hasNext():判断是否存在另一个可访问的元素。
next():返回要访问的下一个元素。
romove():删除上一次访问返回的对象。
六,使用泛型
使集合储存数据明确,不然储存的数据取出时候用不知具体数据类型。
使用泛型即可,增强查询的可读写和安全性。
使用方式例如:List list=new ArrayList();
七,Collections
专门用来操作集合的一个工具类。构造方法被私有,禁止创建对象。
提供一些静态方法来实现对集合的操作。
具体的操作:搜索,复制,排序,线程安全化等。