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决定元素位置。

相关内容

热门资讯

家装预付资金安全困局如何破解,... 家装预付资金安全困局如何破解 专家提出:建立“先验收后付款”装修资金存管制度 预交数万元甚至数十万元...
工行安康解放路支行积极开展《反... 为深入贯彻落实《国家金融监督管理总局安康监管分局办公室关于开展<反有组织犯罪法>宣传活动的通知》要求...
重庆公布育儿补贴制度实施方案 原标题:每孩每年3600元 重庆公布育儿补贴制度实施方案 11月21日,记者了解到,市卫生健康委、市...
十五运会组委会在深总结本届赛事... 深圳新闻网2025年11月22日讯(深圳报业集团记者 林炜航)11月21日,十五运会组委会在深圳市民...
中国军视网:日本妄言击沉福建舰... 本文转自【中国军视网】; 日本首相高市早苗发表涉台错误言论,公然挑战一个中国原则,甚至还有日本无知政...
重磅!东莞长安50万㎡产城发布... 在当下竞争激烈的市场环境中,中小企业如何突破成本压力,找到一片既能扎根成长又能眺望未来的理想栖息地?...
毕马威:政策、资本等多维着力 ... 由毕马威联合长三角G60科创走廊创新研究中心主办的“长三角高端装备新质领袖榜单发布仪式”于11月21...
河曲县开展驻村帮扶工作政策业务... 来源:河曲县融媒体中心 近日,我县组织开展驻村帮扶工作政策业务集中培训,进一步提升驻村帮扶干部...
羽绒服涨价与猪肉降价有关?经济... 中央气象台发布统计信息,14日至17日,我国今年下半年首轮大范围寒潮天气即将自西向东影响我国,多地降...
周勇,任上落马 11月21日,中央纪委国家监委网站发布通报: 国家能源集团乌海能源党委书记、董事长周勇涉嫌严重违纪违...