Set、HashSet、LinkedHashSet、TreeSet
·
Set无序、不重复、无索引
Set集合的方法基本上与Collection的API一致

在Set中add方法的返回值才有意义,有真假两种。要注意remove方法是根据对象的类型和值去删除,因为Set中无索引。List 的 remove 方法有两个重载版本,既可以根据索引删除,也可以根据对象删除。
Hash Set无序、不重复、无索引
LinkedHashSet有序、不重复、无索引
TreeSet可排序、不重复、无索引
HashSet底层用哈希表存储数据。在jdk8之前哈希表由数组加链表组成,之后由数组加链表加红黑树组成
在哈希表中,数据存储的位置由索引决定。哈希值是对象的整数表达形式,索引根据特定公式算出
用定义在Object方法中的hashCode方法计算哈希值,默认使用地址进行计算。如果不重写hashCode方法,属性相同的不同对象计算出的哈希值也是不同的。一般情况下都要进行重写hashCode方法。小部分情况下,不同属性值或者不同地址值计算出来的哈希值也是有可能相等的,叫做哈希碰撞。

重写equals方法的目的是根据属性值去比较元素

数据去重时默认使用hashSet,要求有序时采用LinkedHashSet
TreeSet默认从小到大进行排序,如果是字符类型、字符串类型,就根据字符在ASCII码表中的升序进行排序。
他的底层是红黑树,对于自定义数据类型,不需要重写equals、hashCode方法。
1、javabean类去实现Comparable接口,重写compareTo方法


2、比较器排序

前减后 = 从小到大(升序)
后减前 = 从大到小(降序)

更多推荐




所有评论(0)