List Set Map的区别

List和Set是单列结合,它们的父类是Collection,Map是双列结合,Map用于存储的是键值对,key不允许重复。

List允许重复元素,而Set不允许重复元素。


List以特定次序来持有元素,有先后顺序,加入的对象就像排队一样,先来后到的顺序,有时候也可以插队,即调用add(int index,Obj e)方法,就可以指定当前对象在集合中存放的位置。


Set:存入Set的每个元素都必须是唯一的,因为Set不保存重复元素。加入Set的元素必须定义equals方法以确保对象的唯一性。Set与Collection有完全一样的接口。Set接口不保证维护元素的次序;

(最快的)HashSet:为快速查找而设计的Set。存入HashSet的元素必须定义hashCode();

TressSet:保持次序的Set,底层为树结构。使用它可以从Set中提取有序的序列。元素必须实现Comparable接口。

LinkHashSet:具有HashSet的查询速度,且内部使用链表围护元素的顺序(插入的次序)。于是在使用迭代器遍历Set时,结果会按元素插入的次序显示,元素也必须定义hashCode()方法。


补充点:ArrayList和Vector的区别

答:这两个类都实现了List接口,他们都是有序集合,Vector是线程安全的,而ArrayList是非线程安全的,不考虑线程安全的话使用ArrayList效率会高些,如果多线程访问到集合则使用Vector。他们都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加他们的存储空间,每次增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来的2倍,而ArrayList的增长为原来的1.5倍。他们都可以设置初始空间大小,Vector还可以设置增长的空间大小,而ArrayList没有提供设置增长空间的方法。

即:Vector增长原来的一倍,ArrayList增加原来的0.5倍












猜你喜欢

转载自blog.csdn.net/y13g14m/article/details/60884829