唠唠SE的集合-07——HashSet
7. HashSet 底层数据结构是 哈希表 (元素是链表的数组) 关于这个结构,我觉得有必要用一张图来解释: 哈希表是一个数组,当一个数据(对象)要添加时,先计算对象的hashCode,来确定它应该对应数组的哪个位置,如果那个位置没有数据,则该元素放到对应位置上;如果有数据,则继续调用该对象的equals方法,与该位置的已有数据对比,如果返回true,则HashSet认为这两个数据是一样的,就不允许添加;如果返回false,则在原位置以链表的形式继续向下连接该要添加的数据。 所以说,哈希表依赖于哈希值存储,也就是对象的hashCode方法 HashSet的特性: HashSet不保证迭代的插入顺序性,特别是不保证每次迭代的顺序一致。 比方说下面这段代码,我们做一个String的Set集合,看看每次输出的结果: import java.util.HashSet; public class Test { public static void main(String[] args) { HashSet<String> set = new HashSet<>(); set.add("嘿嘿"); set.add("呵呵"); set.add("嗯呐"); set.add("哈哈"); set.add("好的"); set.add("呼呼"); System.out.println(set)