mtwm.net
当前位置:首页 >> sEt为什么是无序的而list是有序? >>

sEt为什么是无序的而list是有序?

list添加元素时,可以指定位置添加;get取元素时也是指定位置,这还不是有序?set只能迭代,这当然是无序了.

你好!有序指的是存储顺序和添加顺序是相同的,并且可通过它的下标进行访问.而无序则刚好相反,它存储顺序和添加顺序无关,它是没有下标的,当然也就不能通过下标访问喽 我的回答你还满意吗~~

这个应该是按照hash表的遍历去找的,hash表是用算法把不同的数据按照规则放在响应的地址里,所以无论怎么放,位置是一定的,并且遍历的方式也是一定的

要理解这个问题应该考虑到Set是个接口.接口的契约很单纯,不会做过多的保证.Set的契约重点就是“元素不重复的集合”,而对顺序不做保证(也就是不做限制,有序无序都可以).实现该接口的类既可以提供有序的实现,也可以提供无序的实现.HashSet在保存数据的时候显然还是得按一定顺序放入其背后的数组中,但顺序不是用户可控制的,对用户来说就是“无序”.与之相对,SortedSet接口的契约就包含了“元素不重复,且按照用户指定的方式排序的集合”的意义.SortedSet接口满足Set接口的契约,并额外添加的“有序”的契约.

呵呵,这个它就是那么定义的,底层数据结构不一样,List读取效率高,因为在内存中式直接开辟出一块空间来存储的.所以读取起来效率高.存入时就是有序的.相比起来Map的增删效率比较高一些,因为在内存中添加时是以最快的速度就近开辟空间创建对象,然后断开“链”接入,删除时也一样.读取时则需要一个一个找到下一个一直到目标所以效率较List低(List直接访问目标).

set中的顺序是无序的,由对应的hashcode所决定的,而list中元素的数据是存入的时候就定了的.

Stl里面的set自动排序是为了使用方便.数学中的集合元素无序,但是无序不便于比较,更不便于使用.正是因为集合是无序的,所以STL里的自动排序并不与集合的定义冲突:可以没有,不代表不可以有.

首先,要明确“不保证有序”和“保证无序”不等价,HashSet的iterator是前者而不是后者,所以在一次运行中看到有序的结果也是正常的,但不能依赖这个有序行为.况且HashSet并不关心key的“排序”,就算其e68a84e8a2ad62616964757

因为hashtable是的继承Set接口的,Set是Collection(集合)中的无序集合它的元素是不可重复的,而List集合恰好相反,List是Collection中的有序集合,元素可以重复.

因为HashSet是Set集合的实现类,Set就是有序的.

5213.net | mdsk.net | jjdp.net | gpfd.net | snrg.net | 网站首页 | 网站地图
All rights reserved Powered by www.mtwm.net
copyright ©right 2010-2021。
内容来自网络,如有侵犯请联系客服。zhit325@qq.com