List有序,Set无序,真的是这样嘛?( 三 )

同样 , 按照存储顺序来讲 , HashSet依赖哈希存储 , 计算哈希值之后 , 会分散到不同的存储位置上 , 这也就代表存储的时候 , 元素不是一个挨着一个存储的 , 而是根据每个元素的hash值 , 散列到了不同的位置 。 存取的顺序也是不能保证的 , 元素的排序顺序也是不能保证的 , 但好处就是存取效率高 。

而TreeSet依赖的是树存储 , 在树这种结构中 , 无论是二分查找树 , 还是红黑树 , 在存储元素的时候都会对元素本身进行比较 , 按照大小放到合适的位置 , 这也就说明 , 元素会按照树的性质去存储 , 那么也就无法保证存和取元素的顺序 。 但是元素可以在存储的时候根据自身的大小排好序 , 从而可以很轻易的找到最大值 , 最小值 , 以及给定一个元素 , 找到比他大和比他小元素等操作 。

总结:按元素存取顺序来说 , List是有序的 , Set是无序的 。 按照元素和元素之间的关系来说 , List是无序的 , TreeSet是有序的 。 而HashSet怎么说都是无序的 。

推荐阅读