Java集合框架是Java设计者非常重要的一个设计灵感体现。相对数组,Java提供的集合框架是非常高效且方便的,同时也易于操作。根据我们平时书写代码的频率以及面试时经常被问到的知识点里,都不可或缺的提到集合框架,好多同学其实都学过集合框架,但是用的时候却发现自己从没仔细想过,我为什么要用这个集合呢?
1.List类和Set类
List类和Set类是Collection集合接口的子接口。
Set子接口:无序,不允许重复。
List子接口:有序,可以有重复元素。
2.Set和List对比
Set:检索元素效率低下,删除和插入效率高,插入和删除不会引起元素位置改变。
List:和数组类似,List可以动态增长,查找元素效率高,插入删除元素效率低,因为会引起其他元素位置改变。
3.Set和List具体子类
Set
|————HashSet:以哈希表的形式存放元素,插入删除速度很快。
|————LinkedHashSet:采用哈希表存储结构,同时使用链表维护次序。
|————TreeSet:采用二叉树(红黑树)的存储结构。
List
|————ArrayList:动态数组
|————LinkedList:链表、队列、堆栈。
Map接口
Map接口是独立的一个接口,与Collection接口没有关系。
特点是:数据是 key-value 映射
具体子类:
|———— HashMap
Key 无序 唯一 (Set)
Value 无序 不唯一 (Collection)
|———— LinkedHashMap
有序的HashMap 速度快
|———— TreeMap
有序 速度没有hash快
注意:HashSet底层结构其实就是调用HashMap
1.从线程安全方面比较
线程安全就是说多线程访问同一代码,不会产生不确定的结果。集合框架之间的区别和比较的一个点,也就是包括是否线程安全,一般情况下,线程安全就必定速度或效率相对就低,这是由设计决定的。
线程安全集合类与非线程安全集合类
LinkedList、ArrayList、HashSet是非线程安全的,Vector是线程安全的;
HashMap是非线程安全的,HashTable是线程安全的;
StringBuilder是非线程安全的,StringBuffer是线程安全的。
2.从适用场景比较
对于查找和删除较为频繁,且元素数量较多的应用,Set或Map是更好的选择;
ArrayList适用于通过为位置来读取元素的场景;
LinkedList 适用于要头尾操作或插入指定位置的场景;
Vector 适用于要线程安全的ArrayList的场景;
Stack 适用于线程安全的LIFO场景;
HashSet 适用于对排序没有要求的非重复元素的存放;
TreeSet 适用于要排序的非重复元素的存放;
HashMap 适用于大部分key-value的存取场景;
TreeMap 适用于需排序存放的key-value场景。
最后附上集合框架比较的详细图
集合框架不要死记硬背,一定要理解他们的数据结构及底层实现原理,实际工作中,我们常用的也就那么几个,只是面试过程中,会经常被问到它们之间的区别和差异!
以上就是动力节点java培训机构的小编针对“Java编程技术分享,Java常用集合类”的内容进行的回答,希望对大家有所帮助,如有疑问,请在线咨询,有专业老师随时为你服务。
你适合学Java吗?4大专业测评方法
代码逻辑 吸收能力 技术学习能力 综合素质
先测评确定适合在学习