List, Set, Vector and Map in Java
来源:互联网 发布:淘宝众筹失败会怎么样 编辑:程序博客网 时间:2024/06/06 17:41
上次面试的时候被问到了关于List、Set和Map的一些知识,回答的不是很好,今天特意查询了一天关于这方面的一些知识,在此整理一下,自己熟悉知识的同时也做个记录。
List:
List是一个继承于Collection接口,拥有所有的Collection的方法,用于存放线性表数据,对线性表的大小没有限制要求,只要数据在所属数据类型的范围内都可以存放在List中。List接口的两个实现类是ArrayList和LinkedList。
ArrayList: ArrayList是List的顺序存储方式,类似于数组,方便查询,但是对于元素的删除和插入不是很方便。当然ArrayList提供了add(int i, Element e) 和remove(i)方法分别实现插入元素和删除元素,但是时间复杂度是线性的。
LinkedList: LinkedList是List的链表存储方式,方便元素的删除运算和插入运算,但是对于元素的查询,也是需要线性的时间复杂度。这里LinkedList也提供了getFirst(), getLast(), get(index)方法进行查询,方便调用。
ArrayList和LinkedList都允许null元素的插入。
Set:
Set也是一个继承于Collection的接口,也拥有Collection的所有方法。Set中存放的元素要求是无重复的(No Duplicated),Set的实现类为HashSet,TreeSet和LinkedHashSet。
HashSet: 是利用HashTable实现存储的Set的一种存储方式,HashSet中至多只能有一个null值,存取速度较快,存取操作时间均为O(1),无序;
TreeSet: 是利用红黑树实现的一种Set的存储方式,有序,存取操作时间复杂度为O(log(n));
LinkedHashSet: 是利用HashTable实现链式存储的存储方式,按照插入的顺序放置,基本操作时间复杂度为O(1)。
参考Link: http://java.dzone.com/articles/hashset-vs-treeset-vs
Map:
Map是一个存储键值对(key, value)映射的接口,key值是用来检索value值的对象。它的实现有HashMap和TreeMap。
HashMap: HashMap也是利用HashTable存储键值对的,可以存储null键和null值,当hashcode相同时,key值相同的会被覆盖掉,查找速度较快。
TreeMap: TreeMap是利用二叉搜索树进行存储的,所以得到的数据都是有序的,但是检索时间较HashMap长。
List vs Set:
由上面的分析可以看到:List和Set的主要区别在于,Set是无重复元素的Collection,而List是有重复元素的。当然,具体到不同的实现又会有不同的地方,但是根本上的不同就是有无重复元素。
ArrayList vs Vector:
相同点:
1. ArrayList和Vector都是根据数组进行存储的;
2. ArrayList和Vector会保留数据插入时的顺序;
3. ArrayList和Vector都可以存储null值,并且都可以有重复元素。
不同点:
1. Vector是Synchronized的,所以更改和删除Vector是线程安全的,而ArrayList不是Synchronized的,所以Vector更适合用于多线程,这点是主要的区别;
2. ArrayList的存取速度比Vector更快,正是由于Vector是线程安全的,所以Vector在速度上不如ArrayList快。
3. 容量的增长,没有指定增量的ArrayList和Vector的容量的增速是不一样的。所以,当容量小于数据长度时,ArrayList是以1.5倍的速度增长,而Vector是以2倍的速度增长。
- List, Set, Vector and Map in Java
- Something about set list and map in Java
- Difference between Set, List and Map in Java - Interview question
- map set vector list
- vector、list、map、set
- set map list vector
- vector,list,map,set
- Set, List And Map
- java中set/map/list/vector 的总结
- java中set/map/list/vector 的总结
- java中set/map/list/vector 的总结
- java中set/map/list/vector 的详解
- java类集(List/Set/Map/Iterator)(Enumeration/Vector/Stack/Properties)
- Java Collection: List、Set、 Map、 HashMap、 Hashtable、 Vector
- Java list、map、set、vector集合类型中的null值
- java 集合类 map/set/list/vector之间的关系
- JAVA---List,Map,Set
- java:List、set、map
- 指针与数组
- android简介
- HDU1722 数学题?
- A Mathematical Curiosity
- [数论]HDOJ 1222 Wolf and Rabbit 欧几里得算法
- List, Set, Vector and Map in Java
- 关于block
- 索尼宣布出售PC业务
- 鬼脚七:淘宝卖家需知的搜索知识(下)
- Big Number
- 圆形ImageView且设置动态生成的image
- C#word(2007)操作类--新建文档、添加页眉页脚、设置格式、添加文本和超链接、添加图片、表格处理、文档格式转化
- DBA 的那些事
- 新手应该如何学习SEO优化