由点及面,一叶知秋------集合大家庭
Java中的集合类实在是太丰富了,有常用的ArrayList、HashMap,也有不常用的Stack、Queue,有线程安全的Vector、HashTable,也有线程不安全的LinkedList、TressMap,有阻塞式的ArrayBlockingQueue,也有非阻塞式的PriorityQueue等,整个集合家族非常庞大,而且也是错综复杂,可以划分为以下几类:
(1)List
实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack,其中ArrayList是一个动态数组,LinkedList是一个双向链表,Vector是一个线程安全的动态数组,Stack是一个对象栈,遵循先进后出的原则。
(2)Set
Set是不包含重复元素的集合,其中主要的实现类有:EnumSet、HashSet、TressSet,其中EnumSet是枚举类型的专用Set,所有元素都是枚举类型;HashSet是以哈希码决定其元素位置的Set,其原理与HashMap相似,它提供快速的插入和查找方法;TreeSet是一个自动排序的Set,它实现了SortedSet接口。
(3)Map
Map是一个大家族,它可以分为排序Map和非排序Map,排序Map主要是TreeMap类,它根据Key值进行自动排序;非排序Map主要包括:HashMap、HashTable、Properties、EnumMap等,其中Properties是HashTable的子类,它的主要用途是从Property文件中加载数据,并提供方便的读写操作;EnumMap则是要求其Key必须是一个枚举类型。
Map中还有一个WeakHashMap类需要说明,它是一个采用弱键方式实现的Map类,它的特点是:WeakHashMap对象的存在并不会阻止垃圾回收器对键值对的回收,也就是说使用WeakHashMap装载数据不用担心内存溢出的问题,GC会自动删除不用的键值对,这是好事。但也存在一个严重问题:GC是静悄悄回收的(何时回收?God knows!),我们的程序无法知晓该动作,存在着重大的隐患。
(4)Queue
队列,它分为两类,一类是阻塞式队列,队列满了以后再插入元素则抛出异常,主要包括:ArrayBlockingQueue、PriorityBlockingQueue、LinkedBlockingQueue,其中ArrayBlockingQueue是一个以数组方式实现的有界阻塞队列,PriorityBlockingQueue是依照优先级组建的队列,LinkedBlockingQueue是通过链表实现的阻塞队列,另一类是非阻塞队列,无边界的,只要内存允许,都可以持续追加元素,我们最经常使用的PriorityQueue类。
还有一个队列,是双端队列,支持在头、尾两端插入和移除元素,它的主要实现类是:ArrayDeque、LinkedBlockingDeque、LinkedList。
(5)数组
数组与集合的最大区别就是数组能够容纳基本类型,而集合就不行,更重要的一点就是所有元素的集合底层存储的都是数组。
(6)工具类
数组的工具类是java.util.Arrays和java.lang.reflect.Array,集合的工具类是java.util.Collections,有了这两个工具类,操作数组和集合会易如反掌,得心应手。
(7)扩展类
集合类当然可以自行扩展了,想写一个自己的List?没问题,但最好的办法还是“拿来主义”,可以使用Apache的commons-collections扩展包,也可以使用Google的google-collections扩展包,这些足以应对我们的开发需要。
由点及面,一叶知秋------集合大家庭相关推荐
- 由点及面,一叶知秋----集合大家族
Java中的集合类实在是太丰富了,有常用的ArrayList.HashMap,也有不常用的Stack. Queue,有线程安全的Vector.HashTable,也有线程不安全的LinkedList. ...
- 由点及面,一叶知秋——集合大家族
Java中的集合类实在是太丰富了,有常用的ArrayList.HashMap,也有不常用的Stack. Queue,有线程安全的Vector.HashTable,也有线程不安全的LinkedList. ...
- [改善Java代码]由点及面,一叶知秋----集合大家族
Java中的集合类实在是太丰富了,有常用的ArrayList.HashMap,也有不常用的Stack. Queue,有线程安全的Vector.HashTable,也有线程不安全的LinkedList. ...
- 【Java】恭喜你,你的代码获奖了(编写代码的151的建议)
汝之观览,吾之幸也!本文主要摘抄Java代码的151的建议,让你的代码变得更加的优雅,从新手养成编写好代码的习惯. 编写程序是一件优雅的事,所以要学习一些基本的代码规范.本文参考<编写高质量代码 ...
- [ NeurIPS 2020 ] 一叶知秋 —— 基于“单目标域样本”的领域自适应方法
[ NeurIPS 2020 ] 一叶知秋 -- 基于"单目标域样本"的领域自适应方法 引言 华中科技大学.浙江大学.百度研究院新作--基于"单目标域样本"的无 ...
- python集合操作班级干部竞选演讲稿_【必备】竞选班干部演讲稿集合8篇
[必备]竞选班干部演讲稿集合8篇 使用正确的写作思路书写演讲稿会更加事半功倍.在现在的社会生活中,接触并使用演讲稿的人越来越多,你写演讲稿时总是没有新意?以下是小编精心整理的竞选班干部演讲稿8篇,欢迎 ...
- JavaSE——基础知识回顾13之集合(上半部分Collection部分)
文章目录 本次文章就要开始真正进入到Java的核心部分了,集合是属于较难的部分,不仅难在不好理解,还有运用上,再加上这个东西的内容十分的多,体系也十分的庞大,需要花一段时间乃至更久来仔细学习,目前我会 ...
- do还是doing imagine加to_中学必背英语短语集合:54个doing动名词的固定搭配
中学必背英语短语集合:54个doing动名词的固定搭配mp.weixin.qq.com doing动名词是中小学英语教学中的重要内容.在小学的时候老师大概会把doing解释为一般进行时,但层级越往上 ...
- Redis 笔记(07)— sorted set 类型(添加、删除有序集合元素、获取分数范围内成员、按score排序、返回集合元素个数)
zset 可能是 Redis 提供的最为特色的数据结构,一方面它是一个 set,保证了内部 value 的唯一性,另一方面它可以给每个 value 赋予一个 score,代表这个 value 的排序权 ...
最新文章
- ASP.NET AJAX Preview 2
- c语言国家二级培训机构,国家计算机二级C语言培训教案.doc
- tensorflow python2迁移python3_tensorflow在python2和python3上的安装教程
- 和菜鸟一起学linux内核源码之启动篇
- 解决IIS出现“由于权限不足而无法读取配置文件”的问题
- 移植JDK,确实需要CPU指令级的工作
- 新手菜鸟防***必备知识
- 《圆明园的毁灭》教学设计方案
- 汽车诊断之UDS入门-DTC(Diagnostic Trouble Code)相关服务0x14,0x85
- vue3 provide和 reject
- 选择比努力重要,与谁同行比要去的远方重要
- [ACMMM2018]BeautyGAN: Instance-level Facial Makeup Transfer with DeepGenerative Adversarial Network
- 戴尔微型计算机重装WIN10系统,戴尔品牌机如何重装win10系统
- DBCO-PEG4-alcohol CAS:1416711-60-8 二苯基环辛炔-四聚乙二醇-乙醇
- gentoo USE 项目解释
- 干涉仪测向matlab程序,一种相关干涉仪测向算法的快速实现
- 卡巴斯基公布财报,2020年业务稳定增长
- 1997-2022年市场化指数/市场化指数分享/含计算原始代码
- 阻止搜索引擎抓取网站的工具_使用PHP将抓取的网站转变为搜索引擎
- 浪潮服务器销售量,35.6%市占率,浪潮服务器成为中国服务器市场“销量王”
热门文章
- 原生js提供的视频画中画api
- 有趣好玩的html页面,有趣的HTML5网站集合 - 小俊学习网
- Ubuntu18.04 快速返回桌面 【快捷键】
- 【单片机学习笔记】(6):字符串处理函数、变量的三种情况、用函数实现模块化程序设计、晶振与延时、指针
- EasyRecovery免费激活软件秘钥下载恢复教程及注意事项
- 洛谷P3374 树状数组模版1
- 双 JK 触发器 74LS112 逻辑功能。真值表_触发器的工作原理是什么
- Go-Proxy-Checker,一款基于Go编写的高性能代理服务器验证工具
- 基于Tensorflow 三层神经网络拟合二次函数(附代码与解析)
- Pandas数据分析groupby函数深度总结(1)