Java学习总结
创始人
2025-06-01 18:02:02
0

Java中list为什么有序?

作者:麦穗星
链接:https://www.zhihu.com/question/468756770/answer/1980061276
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

List底层有两种实现方式基于数组ArrayList)和基于链表LinkedList)。

首先要明确的是:既然前提是「有序」,那么有序的表现是什么?就是在遍历元素的时候其顺序与添加的顺序是一致的,因此应该使用默认的add操作,不能随便指定位置插入,否则即使用的是List也不能表现出有序的特征!

1)数组:是一种紧凑的数据结构,占用的是一块连续的内存,每个元素都挨个排列,可以通过索引快速获取指定位置的元素,一般情况下添加元素时按照从左往右顺序添加,因此它是有序的。

2)链表:内存中是不连续的,但是其中的每个节点都有个变量记录了该节点的下一个节点(简单起见这里用单向链表举例):

N1 -> N2 -> … -> Nn

选定一个节点,就能通过该节点的next指针(变量)找到下一个节点。

而链表插入操作一般是边界操作(头/尾插入),只要插入操作调用的方法一样,就能保证其中元素的顺序与插入时一致。

题外话:

我们都知道HashSet(这里强调HashSet,是因为Set并不一定是无序的,要注意实现)是无序且不允许重复的,它基于HashMap,基本就是直接调用HashMap的API,而HashMap的元素的存储位置是根据元素(对象)的hashCode: int计算所得,可能先添加的元素hashCode比较大,而后添加的元素hashCode比较小,因此造成添加顺序与实际元素顺序不符的情况,这就是无序

总结:

  • List只是具备有序的性质,但是否有序依然要视具体的操作来定;
  • HashSet天然无序,它不受调用方式、插入顺序的影响,只以hashCode决定元素位置。

相关内容

热门资讯

常德首部物业服务地方性法规6月... 华声在线6月2日讯(全媒体记者 黄琼)5月30日,常德市召开《常德市住宅小区物业服务监督若干规定》(...
省人大新法规发布会首次开到基层... 本报讯 (记者 陈月飞) 5月30日,省十四届人大常委会第十五次会议全票通过《江苏省预防化解矛盾纠纷...
“人社惠企贷”政策又升级 小微企业经营遇到资金困难怎么办?河北“人社惠企贷”能帮您。据河北新闻联播报道,我省推出多项稳岗促就业...
南方电网电力科技股份有限公司 ... 证券代码:688248 证券简称:南网科技 公告编号:2025-016 南方电网电力科技股份有限公司...
加快促就业政策落实落地 教育部... 进入毕业季,教育部要求各地加快促就业政策落实落地,千方百计迅速拓展一批吸纳高校毕业生就业的新岗位,全...
深圳海关“政策+科技”双支撑 ... 当前,全球贸易形势复杂多变,作为外贸大省的重要窗口,深圳海关积极作为,以智慧监管为抓手,以精准服务为...
京东外卖将扩招至15万名全职骑... |2025年6月3日 星期二| NO.1京东外卖:近期将扩招至15万名全职骑手 6月1日,京东外卖宣...
免关税政策即将到期 欧盟将与乌... 欧盟委员会发言人奥洛夫·吉尔2日表示,欧盟当前针对乌克兰的免关税政策将于6月5日到期,欧盟正在着手制...
鲍威尔出席美联储国际金融司活动... 美联储主席鲍威尔(Jerome Powell)周一在美联储国际金融司(IF)成立75周年活动上发表讲...
关税政策推进受阻,特朗普政府求... 6月2日,美国特朗普政府请求联邦上诉法院阻止此前哥伦比亚特区联邦地区法院裁定其关税政策“违法”的命令...