Set无序、不重复、无索引Set集合的方法基本上与Collection的API一致在Set中add方法的返回值才有意义有真假两种。要注意remove方法是根据对象的类型和值去删除因为Set中无索引。List 的remove方法有两个重载版本既可以根据索引删除也可以根据对象删除。Hash Set无序、不重复、无索引LinkedHashSet有序、不重复、无索引TreeSet可排序、不重复、无索引HashSet底层用哈希表存储数据。在jdk8之前哈希表由数组加链表组成之后由数组加链表加红黑树组成在哈希表中数据存储的位置由索引决定。哈希值是对象的整数表达形式索引根据特定公式算出用定义在Object方法中的hashCode方法计算哈希值默认使用地址进行计算。如果不重写hashCode方法属性相同的不同对象计算出的哈希值也是不同的。一般情况下都要进行重写hashCode方法。小部分情况下不同属性值或者不同地址值计算出来的哈希值也是有可能相等的叫做哈希碰撞。重写equals方法的目的是根据属性值去比较元素数据去重时默认使用hashSet要求有序时采用LinkedHashSetTreeSet默认从小到大进行排序如果是字符类型、字符串类型就根据字符在ASCII码表中的升序进行排序。他的底层是红黑树对于自定义数据类型不需要重写equals、hashCode方法。1、javabean类去实现Comparable接口重写compareTo方法2、比较器排序