我感觉不是这个原因吧 SET 是有序集合 HASHSET 在API中的解释是 此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。 所以我认为是顺序的问题吧 不知道对不对,希望火龙果大叔 出来讲解下 哈哈···
List Set Map三种结合的存储数据结构是不一样的。 他们的hasnext都是判断时候还有值 next方法都是取出当前值,把指针移到下一个值。 你说的list set输出的值不一样那是应为数据本身在集合存储的结果不一样导致的 并不是这两个方法不同所导致的。 List存储数据时通过数组,你遍历元素的顺序就是你存储进去的顺序。 而HashSet内部用的存储结构就是个HashMap所以他的存储机制其实就是Entry Entry存储元素是根据值派讯的 所以存储顺序一次是 is sunday today.所以你取出来的顺序就是值排序后的顺序
对于Set,next()也是遍历,但Set存储时不保证数据的逻辑顺序,所以看起来next()的返回通常是乱序的,对于HashSet,其实它返回的顺序是按Hashcode的顺序
SET 是有序集合
HASHSET 在API中的解释是
此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
所以我认为是顺序的问题吧
不知道对不对,希望火龙果大叔 出来讲解下 哈哈···
他们的hasnext都是判断时候还有值
next方法都是取出当前值,把指针移到下一个值。
你说的list set输出的值不一样那是应为数据本身在集合存储的结果不一样导致的
并不是这两个方法不同所导致的。
List存储数据时通过数组,你遍历元素的顺序就是你存储进去的顺序。
而HashSet内部用的存储结构就是个HashMap所以他的存储机制其实就是Entry
Entry存储元素是根据值派讯的 所以存储顺序一次是 is sunday today.所以你取出来的顺序就是值排序后的顺序
对于Set,next()也是遍历,但Set存储时不保证数据的逻辑顺序,所以看起来next()的返回通常是乱序的,对于HashSet,其实它返回的顺序是按Hashcode的顺序
API有说,好比说LINKEDHASHSET是保证插入顺序,而且又有SET的特色
在好比说,TREESET就会根据Comparator接口来排序,具体看看每个不同实现类