LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例

一、LinkedHashSet集合

public class LinkedHashSet implements Set
是具体的类

  • 哈希表和链表实现的Set接口
  • 存入和取出的顺序一致(链表特性)
  • 没有重复的元素(哈希表)
    LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第1张图片
    演示:
    LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第2张图片
    确实顺序一致且不重复

二、TreeSet集合

public class TreeSet implements NavigableSet
public interface NavigableSet extends SortedSet
public interface SortedSet extends Set
是具体的类
LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第3张图片
1、TreeSet()元素有顺序,顺序规则取决于构造函数

  • 若是无参构造,则自然排序
  • 若是有参构造,则根据指定的比较器进行排序
    2、没有索引,不能普通for遍历,可以Iterator和增强for
    3、与Set有间接继承关系,因此元素不能重复
    注意:
    集合只能存储引用类型

如果想存储基本类型,必须用他们的包装类
例如存储整数只能用Integer

TreeSet it = new TreeSet();

与存入同序
LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第4张图片
不重复
LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第5张图片

四、Comparable接口

public interface Comparable
LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第6张图片
自定义的类使用TreeSet需要实现Comparable接口,重写方法

public class Student implements Comparable{
}
@Overwrite
public int compareTo(Student o){
    return 0;
}

return 0;只输出第一个元素
return 1;输出的元素按升序
return -1;输出的元素LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第7张图片
按年龄排序:

@Overwrite
public int compareTo(Student o){
    int num = this.age-o.age;//升序
    //int num = o.age-this.age;//降序
    return num;
}

如果年龄相同,比较名字
名字是String类型,他已经实现了Comparable接口

@Overwrite
public int compareTo(Student o){
    int num = this.age-o.age;//升序
    //int num = o.age-this.age;//降序
    int num1 = num==0?this.name.compareTo(o.name):num;
    return num;
}

LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第8张图片

三、Comparator比较器

image.png

有参构造方法中接收new comparator,即comparator的对象
重写compare方法,注意主要条件和次要条件(三元运算符)

LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第9张图片
LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第10张图片

五、案例一

LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第11张图片
LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第12张图片

六、案例二

LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第13张图片
LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第14张图片
LinkedHashSet、TreeSet、自然排序(Comparable接口、Comparator)、案例_第15张图片
Random类的用法:创建对象,对象调用方法nextInt(bound)

你可能感兴趣的:(java)