1、什么是Set接口?
Set接口是Collection接口的子接口,存放的元素无序且不允许重复(没有索引信息,不能调用.get()方法)。
Set接口没有提供Collection接口额外的方法,也就是仍然使用Collection接口已经定义好的方法,这一点和List接口类似。
2、Set接口常用的实现类有:
HashSet:散列存放,无序;
TreeSet:有序存放,自然排序(并非按照存入顺序);
Set接口存、取、删对象都有很高的效率。
HashSet原理:根据每个对象的哈希码值(调用.hashCode( )获得)用固定的算放算出它的存储索引,把对象存放在hash表中的相应位置中;
存放对象时,首相获得该对象的hashCode值,与hash表中的值进行比较,如果不存在,则直接把该对象存入集合中,并把该hashCode值存入hash表中,此时add操作结束。如果存在则进行下面的计算:通过“==”操作符判断已经存入的对象与要存入的对象是否为同一对象,如果true则集合认为要添加相同对象,add失败。如果false则调用要添加对象的.equals( )方法,如果返回值为true则集合认为添加相同对象,add失败。否则添加成功。
TreeSet存储原理:存放时会调用集合元素的CompareTo( )方法,根据该方法的返回值来比较元素之间的大小,然后进行“升序”排序,这种排序方法我们称之为自然排序(升序排列)。
注意:如果想要采用自然排序则要存储的对象所属类必须实现Comparable接口。该接口只有一个方法public int compareTo(Object obj),必须实现该方法。
完结