范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java集合类框架详解

  Java集合框架概述
  集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。
  Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:List、Set、Queue,因此Java集合大致也可分成List、Set、Queue、Map四种接口体系(注意:Map不是Collection的子接口)。
  其中:
  List代表了有序可重复集合,可直接根据元素的索引来访问;
  Set代表无序不可重复集合,只能根据元素本身来访问;
  Queue是队列集合;
  Map代表的是存储key-value对的集合,可根据元素的key来访问value。
  常见的实现类分别是ArrayList、LinkedList、ArrayQueue、HashSet、TreeSet、HashMap、TreeMap等。
  Java集合类常见接口及实现类
  01
  Collection接口   Collection接口是最基本的集合接口,它不提供直接的实现,Java SDK提供的类都是继承自Collection的"子接口"如List和Set。   在Java中所有实现了Collection接口的类都必须提供两套标准的构造函数,一个是无参,用于创建一个空的Collection,一个是带有Collection参数的有参构造函数,用于创建一个新的Collection,这个新的Collection与传入进来的Collection具备相同的元素。   02
  List接口   List接口为Collection直接接口。List所代表的是有序的Collection,即它用某种特定的插入顺序来维护元素顺序。   用户可以对列表中每个元素的插入位置进行精确地控制,同时可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。   实现List接口的集合主要有:ArrayList、LinkedList、Stack等。   03
  Map接口   Map与List、Set接口不同,它是由一系列键值对组成的集合,提供了key到Value的映射。同时它也没有继承Collection。   在Map中它保证了key与value之间的一一对应关系。也就是说一个key对应一个value,所以它不能存在相同的key值,当然value值可以相同。   实现map的有:HashMap、TreeMap、HashTable。   ArraysList 和 LinkedList   01
  ArrayList是实现了基于动态数组的数据结构,LinkedList基于链表的数据结构。   02
  对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。   03
  对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。若只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但若是批量随机的插入删除数据,LinkedList的速度大大优于ArrayList. 因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。   04
  ArrayList的大小默认为10,每次扩容为1.5倍,即为int newCapacity = oldCapacity + (oldCapacity >> 1)。随着容器中的元素不断增加,容器的大小也会随着增加。   在每次向容器中增加元素的同时都会进行容量检查,当快溢出时,就会进行扩容操作。所以如果我们明确所插入元素的多少,最好指定一个初始容量值,避免过多的进行扩容操作而浪费时间、效率。   05
  ArrayList中的size、isEmpty、get、set、iterator 和 listIterator 操作都以固定时间运行。   add 操作以分摊的固定时间运行,也就是说,添加 n 个元素需要 O(n) 时间(由于要考虑到扩容,所以这不只是添加元素会带来分摊固定时间开销那样简单)。   06
  同样实现List接口的LinkedList与ArrayList不同,LinkedList是一个双向链表。所以它除了有ArrayList的基本操作方法外还额外提供了get、remove、insert方法在LinkedList的首部或尾部。   由于实现的方式不同,LinkedList不能随机访问,它所有的操作都是要按照双重链表的需要执行。在列表中索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。   这样做的好处就是可以通过较低的代价在List中进行插入和删除操作。   HashMap 和 TreeMap   01
  HashMap   以哈希表数据结构实现,查找对象时通过哈希函数计算其位置,它是为快速查询而设计的,其内部定义了一个hash表数组(Entry[] table),元素会通过哈希转换函数将元素的哈希地址转换成数组中存放的索引,如果有冲突,则使用散列链表的形式将所有相同哈希地址的元素串起来,可能通过查看HashMap.Entry的源码它是一个单链表结构。   其不是同步的,且允许空值作为键和值。   HashMap的数据结构为数组+链表/红黑树(冲突的链表多于8个时,就把这个链表转换成红黑树),初始容量是16,默认加载因子为0.75。   HashMap的长度n为什么是2的整数次幂?一是为了减少hash冲突的概率,n为偶数 最低位为0异或后结果必为偶数。   其次是为了加快hash计算,&比%速度快;还有在JDK1.8中,扩容更方便,关注特殊位(n-1会多出一位,然后关注和这位对齐的hash,0不变,1加一个扩容之前的n)。   HashMap在JDK 1.7中使用的是头插法,在并发put时出现Entry链表形成环形数据结构,导致死循环,为了解决这个问题,在JDK1.8中使用的是尾插法。   如何保证HashMap的线程安全:   一是Collections工具类中synchronizedCollection;   二是采用装饰者模式实现map接口对HashMap进行封装;   三是直接使用ConcurrentHashMap。   02
  TreeMap   TreeMap存储K-V键值对,通过红黑树(R-B tree)实现。   TreeMap继承了NavigableMap接口,NavigableMap接口继承了SortedMap接口,可支持一系列的导航定位以及导航操作的方法,当然只是提供了接口,需要TreeMap自己去实现。   TreeMap实现了Cloneable接口,可被克隆,实现了Serializable接口,可序列化。   TreeMap因为是通过红黑树实现,红黑树结构天然支持排序,默认情况下通过Key值的自然顺序进行排序。   对集合的选择   01
  对List的选择   对于随机查询与迭代遍历操作,数组比所有的容器都要快。所以在随机访问中一般使用ArrayList   LinkedList使用双向链表对元素的增加和删除提供了非常好的支持,而ArrayList执行增加和删除元素需要进行元素位移。   对于Vector而已,我们一般都是避免使用。   将ArrayList当做首选,毕竟对于集合元素而已我们都是进行遍历,只有当程序的性能因为List的频繁插入和删除而降低时,再考虑LinkedList。   02
  对Set的选择   HashSet由于使用HashCode实现,所以在某种程度上来说它的性能永远比TreeSet要好,尤其是进行增加和查找操作。   虽然TreeSet没有HashSet性能好,但是由于它可以维持元素的排序,所以它还是存在用武之地的。   03
  对Map的选择   HashMap与HashSet同样,支持快速查询。虽然HashTable速度的速度也不慢,但是在HashMap面前还是稍微慢了些,所以HashMap在查询方面可以取代HashTable。   由于TreeMap需要维持内部元素的顺序,所以它通常要比HashMap和HashTable慢。

中国画质天花板!TCLX11简直是看剧神器说到五月热播的电视剧,必然少不了这部由张译王俊凯领衔主演的重生之门。该剧讲述的是刑警队长罗坚(张译饰)在调查一起古画偷盗案件时结识了青城大学法学系学生庄文杰(王俊凯饰),两人携手破技术人必备的接口测试神器apifoxapipostyapi,实用现在的JavaWeb项目大都是前后端分离的,需要的人员有后端前端测试。这时,接口文档就特别重要。本文介绍apifoxapipostyapi这三款接口文档工具的区别。apifox一a600道Java面试题及答案整理(建议收藏)小七整理了最近几年最新最全的Java面试题,题目涉及Java基础集合多线程IO分布式Spring全家桶MyBatisDubbo缓存消息队列Linux等等。题库共600道,带全部答案iPhone相机的三个技巧改变默认设置拍出完美照片对于绝大多数人来说,手机已完全代替数码相机成为唯一的拍照设备。苹果也知道这一点,并尽可能提升iPhone的拍照体验。iPhone摄像头已经走过了15年漫长的发展道路。你是否知道,在潘多拉魔盒已被打开,美国不惜违反禁令,也要得到我国顶尖技术笔者杰鲁鲁现代国家之间的国力比拼,拼的就是科技的实力。也许有很多人会觉得,那难道经济就不重要了吗?经济虽然重要,但并不是决定一个国家实力的真正标准。欧洲很多经济非常发达的国家,但是距今2。44亿年!尾巴长长长长长的新属种,在云南现身科技日报记者陆成宽去年,第一次看到红河龙化石的时候,我就向有关专家请教,但被告之这是一种乌蒙龙化石。对此,我一直持怀疑态度。5月9日,在接受科技日报记者采访时,中科院古脊椎动物与古曲面屏和直屏各有什么优点和缺点?作为消费者又该如何选择?文小伊评科技在目前的手机市场中,根据屏幕的形态大体可以分为三个阵营直屏曲面屏和折叠屏,其中后者目前还没有大规模的普及,基本可以忽略不计。所以,日常我们消费者可选择的机型一般就集中在像摄像头一样大小的电视盒子创维小盒子评测,网友期待升级版写在前面时下智能电视盒子市场发展的越来越快,继智能手机之后,智能电视智能电视盒子市场成为了当今最炙手可热的一块新的战场。其中,当属基于安卓系统的智能电视系统最为耀眼,盒子市场也在向三星GalaxyS22Ultra爆料集成S21UltraNote20Ultra双旗舰优点月前,高通新一代旗舰处理器骁龙8Gen1正式发布,而全新的三星GalaxyS22系列也将会是首批搭载该芯片的旗舰机型之一,依然将包含GalaxyS22GalaxyS22(或名为Ga淘宝个人店铺升级为企业店铺,有什么好处?有什么坏处?企业店铺是鸡肋,其实没什么用。以前阿里一加独大,电商流量主要集中在天猫和淘宝。时过境迁,现在,阿里碰到京东,苏宁,拼多多和唯品会,网易考拉和严选的强力竞争。还有中石油,石化等国企巨前沿洞察丨戴上VR设备沉浸式治疗慢性腰痛,已获FAD批准本期前沿洞察为大家带来这些技术沉浸式治疗慢性腰痛的VR设备代替蜘蛛侠们上岗摩天大楼外墙清洁工作的机器人可实现挥一挥衣袖安全支付的智能织物一起来看看吧戴上VR设备,沉浸式治疗慢性腰痛
红爆韩国普拉提女神,身材照太诱人!躺着拉筋5分钟,脂肪唰唰掉说到倍受女性喜爱的健身运动,除了在健身房撸铁练习瑜伽美体塑形之外,普拉提正成为健身房内外的常见话题。给大家,介绍一位韩国的普拉提女神()姜贤京出生在韩国全州市,是韩国最著名的普拉提小白鞋救星来啦!日本抢破头的宜家洗鞋神器,天天穿全新小白鞋作为鞋柜中的镇柜之宝,小白鞋说第二,没人敢说第一。不管是奢侈品牌GUCCI巴宝莉,或是平民品牌匡威安踏,还有国牌回力,每一季的新品总有小白鞋的一席之地时髦小作精虞书欣也对小白鞋宠爱罗永浩回归锤子?正面硬刚苹果发布会,离收购目标又进一步在最近这段时间,大家对于罗永浩的印象好像已经从锤子CEO变成了著名脱口秀艺人,直播,上脱口秀节目,可谓是忙的不亦乐乎,但是他自己却从来没有忘记过自己在手机圈的梦想。在最近,罗永浩就小米有品巅峰!7天抢空15万件,厂家连夜加工,比抢黄金还疯狂十年前,雷军带着十来个人在中关村做起了小米手机,这对他们来说无疑是异想天开,但是这些人把不可能变成了可能,小米1刚发布就销售了700多万台。雷军创业成功后,站在互联网风口上的企业家小米弹力鞋别出心裁!爆米花底反光设计,远照1000mm时隔五个月开学,宿舍里的环境相信大家都心中有数,蟑螂老鼠都成家了,我还是一个人。最可恶的是,鞋子全都发霉了,逼于无奈只好都买新的了。我的鞋子从不看品牌,舒适就好,其中米家运动鞋系列国产运动鞋有口难言,logo占了主要原因?网友缺乏自信有没发现近几年国产运动鞋的颜值提升了很多?特别是18年李宁在纽约时装周上别具一格的国潮设计,悟道ACE运动鞋大胆撞色拼接,打开了国潮运动鞋的潮流大门,越来越多的年轻人也会选择国产品35岁被辞,与其抱怨,不如杀出一条生路大家好,我是老李。今天和大家聊一下职业规划和中年危机。被互联网裁员的80后35岁大厂程序员,转行做滴滴司机我跑滴滴是没有办法呀,已经没有公司肯要我了很多人印象中程序员工资很高,应届卢伟冰竟威胁了共享充电宝?网友这次我们站小米小米干了十年,从2011年的营收5亿到2019年的2058亿,在世界500强中排名422位,再到2020年重返世界第三,小米的成长,众多米粉都看在眼里。这十年,小米凭借自家的产品与车辆保养后,剩余的机油下次还能使用吗?当然可以,但要讲究方法车辆保养大家再熟悉不过了,每年保养一到两次属于正常情况。不知道大家保养时有没有发现,每次保养后机油都会剩一些,倒不是维修小工偷工减料,而是保养手册上的硬性规定。不同排量不同车型添加当场定车送6次免费保养,4S店的这个惯用套路,你得提防点4S店是个比较有意思的地方,经常能给小木提供一些话题。比如买车的套路,这个老生常谈的话题,小木也说过很多,今天呢,给大家讲一个比较容易上当又挺隐蔽的套路,就是当场定车送三年6次免费20万左右的合资车,有哪些SUV推荐?综合考虑,这5款值得购买没有引文,直接进入正题,五款车型分别是大众探岳日产奇骏马自达CX5别克昂科威凯迪拉克XT4。(说明下我没有被充值,五款车型仅供参考)大众探岳一汽的探岳相比上汽的途观L,整个车身设计