本帖最后由 librazeng 于 2013-6-9 12:35 编辑
set接口的子类主要有TreeSet和HashSet,两者保证元素的唯一性的办法是不同的。
TreeSet:
这个集合采用的是二叉树结构存储数据,如下图
二叉树的算法
TreeSet集合存储元素的时候,采用元素的自然排序(元素实现Comparable接口,覆写ComparaTo方法)或者集合添加的比较器(比较器实现Comparator接口,覆写Compare(obj o1,obj o2)方法),通过二叉树排序来发现是否有元素重复,如果重复就不再存储了。
HashSet:
这个集合实际是个链表数组,利用元素自身的hashCode()和equals()方法,先比较元素的哈希值是否相等(哈希算法为每个元素生成一个伪随机数,但可能出现不同的元素算出相同哈希值的情况),如果不同就存入链表数组中;如果相等再比较元素是否相同,如果哈希值相同,但元素不同,则会用解决哈希冲突的算法,将两个元素存入链表数组中。
|