20180803_13_Java中Set集合的三个子集合HashSet,LinkedHashSet,TreeSet的相关介绍

 

Set集合

       List集合的特点:元素有序,(元素存取顺序一致)元素可以重复

       Set集合的特点:元素无序,(元素存取顺序不一致) 元素不重复

HashSet:

       底层数据结构时哈希表,元素无序,且唯一,唯一是要靠元素重写hashCode()方法和equals()方法来实现,如果不重写这两种方法,则无法保证元素唯一。Integer和String默认重写了这两种方法。

       线程不安全,效率高,允许存储null元素。

LinkedHashSet:

       底层数据结构是链表和哈希表,元素有序且唯一,链表保证元素有序,哈希表保证元素唯一

       线程不安全,效率高。

TreeSet:

       底层数据结构是二叉树,元素唯一且能对元素进行排序,排序分为自然排序和比较器排序,如果用空参构造就是自然排序,如果是有参构造就是比较器排序。

       自然排序:元素必须实现Compareble接口并且重写compareTO()方法 ,元素排序就是根据compareTO()方法,的返回值的正负来决定排列顺序,返回0 元素不往里面存。

       比较器排序:Comparator 比较器 是一个接口 接口中有一个比较的方法 compare()根据此方法的返回值的正负以及0 来决定元素的排列顺序

       A:匿名内部类:
TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() {

    @Override

    public int compare(Student s1, Student s2) {
        //根据条件来排序

        int r = s1.getAge() - s2.getAge();

        int r2 = r == 0 ? s1.getName().compareTo(s2.getName()) : r;



        return -r2;

    }

});

             

               B:创建接口子实现类:

public class MyCompareTor implements Comparator<Student> {

       @Override

      
public int compare(Student s1, Student s2) {
       
//根据条件来排序
       
int r = s1.getName().length() - s2.getName().length();
        int
r2 = r == 0 ? s1.getAge() - s2.getAge() : r;
        int
r3 = r2 == 0 ? s1.getName().compareTo(s2.getName()) : r2;
        return
r3;
   
}
}

MyCompareTor myCompareTor = new MyCompareTor();
TreeSet<Student> students = new TreeSet<>(myCompareTor);

 

      

猜你喜欢

转载自blog.csdn.net/Lisiluan/article/details/81394636