除Map外,所有集合均实现了Iterable接口,那么首先我们可以了解下Iterable的特点
Iterator接口的remove方法可以删除的是next()最新返回的项,此后不能继续调用,除非发生下次next()
Collection接口为我们常用的几个集合接口的父类.它继承了Java.util包
提供了包括上面Iterable中提到的remove(),iterator()方法,另外还有像size();clear();isEmpty()等方法
集合Collenction接口下面包含了多个子接口,那么就我们常用的这些接口来分析一下
List的特点:可以有重复的值,有顺序
而list下面包含的Array List和LInked list又有其不同的优点
不过,在项目中我们大部分都是用的Array list,不过,在项目中我们大部分都是用的Array list
Set的特点:数据不能重复,无序,子集合有3个分别是
队列,存储的是对话信息
区别于Collection以外的另一种集合形式,采用键值对的形式存储数据,键可以重复值不能重复.
既然如此,我们不由可以联想到Set和Array list的特点,如此我们就能吧Map的键类比为Set形式,而值就可以类比为Array list的储存形式
下面我们来介绍一下它的子接口
1.Array的长度固定,而ArrayList的长度是可变的
2.Arrat只能存储单一类型的数据,而ArrayList可以存储多种类型的值,不过在项目中我们一般会为了安全性考虑而填写泛型来限定它的值类型
ArrayLIst的扩容问题:初始大小是10,增长1.5倍
补充:HashMap的扩容16 0.75 12 2倍 2的n次幂
2.将数组作为集合,将集合转为数组分别调用什么方法
数组做集合用Arrays.asList();集合转数组用List.toArray(),
3.HashMap和HashSet的区别
1.实现了不同的接口,一个是Map接口一个是Set接口
2.存储数据的类型不一样,一个是键值对一个是对象
3.存值的方法不一样,一个是put方法一个是add方法
4.计算hashcode的参数不一样,HashMap用key去计算
5.访问速度不一样,HashMap速度快
补充:HashMap的实现原理
存储对象时,为了方便后面的查询,都会存在一个bucket位置,而HashMap就是通过键去调用hashcode方法计算hash而得到这个bucket的,而进行扩容时参考的也是bucket的占有情况,HashMap键值对就是通过键计算出bucket位置再调用equals()方法来查询出值的
4.LIst.Set,Map的区别
值:LIst可以重复,Set不能重复,Map键唯一,值可以重复(参考Map键值对形式的类比)
出List外都是无序存值
补充 Vector
Vector 基本上很少用到了,和ArrayList很相似,唯一的不同是Vector的方法都是线程安全的,而Array List是非线程安全的,从这点上来说,ArrayList的效率要比Vector的效率高,另外Vector是以2倍的方式扩展数组容量的