Java集合框架
2021/8/30 14:06:15
本文主要是介绍Java集合框架,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
Java 集合框架
1.关于容器
容器就是可以容纳其他Java对象的对象,Java Collections Framework(JCF) 提供了通用的容器
优点是:
降低编程难度和学习难度,提高程序性能
增加程序的重用性
提高API之间的互操作性
Java容器中只能放对象,对于基本类型要把其包装成对象(包装类)才能放到容器里
容器主要包括 Collection 和 Map 两种,Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。
2.Collection
Set:无序,唯一
Set继承Collection接口,是一个不允许出现重复元素,并且无序的集合,主要有TreeSet和HashSet。
在判断重复元素时,Set集合会调用hashCode()和equal方法实现。
TreeSet
基于红黑树实现,每一个元素都是树中的一个节点,插入的元素都会进行排序。查找效率不如HashSet,HashSet查找时间复杂度为O(1),
TreeSet查找时间复杂度为O(logN)。
HashSet
哈希表结构,支持快速查找。主要利用HashMap的key来存储元素,计算插入元素的hashCode来获取元素在集合中的位置。失去了元素的插入顺序信息,也就是说使用 Iterator 遍历 HashSet 得到的结果是不确定的
HashSet底层由HashMap实现,插入元素被当作是HashMap的key,根据hashCode值来确定集合中的位置,由于Set集合中并没有下标的概念,所以并没有像List一样提供get()方法。当获取HashSet中某个元素时,只能通过遍历集合的方式进行equals()比较来实现。
如果你知道是Set,但是不知道是哪个Set,就用HashSet。
LinkedHashSet
具有HashSet的查找效率,且内部使用双向链表维护元素的插入顺序
List:有序,可重复
ArrayList
基于动态数组实现,支持随机访问。
查询快,增删慢;线程不安全,效率高
如果你知道是List,但是不知道是哪个List,就用ArrayList。
Vector
和ArrayList类似,但他是线程安全的,效率低
LinkedList
基于双向链表实现,只能顺序访问,但是可以快速地在链表中插入和删除元素。不仅如此,LinkedList还可以用作栈,队列和双向队列。
查询慢,增删快;线程不安全,效率高
3.Map
Map接口有三个比较重要的实现类,分别是HashMap、TreeMap和HashTable
TreeMap
基于红黑树实现,有序
HashMap
基于哈希表实现,线程不安全,效率高。如果对同步性或与遗留代码的兼容性没有任何要求,建议使用HashMap
HashMap允许null值(key和value都允许)
现在可以使用 ConcurrentHashMap 来支持线程安全,并且 ConcurrentHashMap 的效率会更高,因为 ConcurrentHashMap 引入了分段锁
HashTable
和HashMap类似,但他是线程安全的,Hashtable不允许null值
问题分析
(一) TreeSet,LinkedHashSet和HashSet的区别
相同点:都实现Set接口,三者都不是线程安全的,如果要使用线程安全可以使用Collection.synchronizedSet()
不同点:HashSet插入数据最快,其次是LinkedHashSet,最慢的是TreeSet因为内部实现排序
HashSet不保证有序,LinkedHashSet保证FIFO即按插入顺序排序,TreeSet按照内部规则排序,也可自定义排序规则
HashSet和LinkedHashSet允许存在null数据,但TreeSet中插入null数据时会报NullPointerException
这篇关于Java集合框架的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-12百万架构师第十五课:源码分析:Spring 源码分析:SpringMVC核心原理及源码分析|JavaGuide
- 2025-01-11有哪些好用的家政团队管理工具?
- 2025-01-11营销人必看的GTM五个指标
- 2025-01-11办公软件在直播电商前期筹划中的应用与推荐
- 2025-01-11提升组织效率:上级管理者如何优化跨部门任务分配
- 2025-01-11酒店精细化运营背后的协同工具支持
- 2025-01-11跨境电商选品全攻略:工具使用、市场数据与选品策略
- 2025-01-11数据驱动酒店管理:在线工具的核心价值解析
- 2025-01-11cursor试用出现:Too many free trial accounts used on this machine 的解决方法
- 2025-01-11百万架构师第十四课:源码分析:Spring 源码分析:深入分析IOC那些鲜为人知的细节|JavaGuide