对HashSet总结一下下啦:
第一:HashSet的遍历只能用迭代器和增强for循环两种方式来遍历不能用普通for循环来遍历;因为HashSet有一特点就是无索引的,而普通for循环用到了size()和get()方法的结合,然而get()方法的形成需要的是索引故不能。
第二:HashSet存储字符串(基本数据类型:会自动装箱变成相应的类)和自定义对象时都可以保证元素的唯一性,但是取出来时是无序的,那这个唯一性是怎么保证的呢?原理解说如下:
我们创建好了集合对象往里面存东西,用的是add()方法,在调用add()方法来存储元素时会先调用元素(对象)的hashCode()方法得到一个哈希值:添加第一个进去时,它的哈希值没得比较就直接存到集合里去了,然后添加后面的元素进集合,同样调用它的hashCode()方法得一哈希值,此时就会拿此哈希值与集合里已有的每一个元素的哈希值进行比较:
如果没有相同的,就直接存进集合里.
如果有相同的就去调用equals()方法:若比较结果是true就不存入集合里,若是false就将元素存入集合里。如此就可以将重复的元素去掉从而保证了集合里面元素的唯一性。 |
|