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

一、LinkedHashSet集合

public class LinkedHashSet implements Set
是具体的类

  • 哈希表和链表实现的Set接口
  • 存入和取出的顺序一致(链表特性)
  • 没有重复的元素(哈希表)
    image.png
    演示:
    image.png
    确实顺序一致且不重复

二、TreeSet集合

public class TreeSet implements NavigableSet
public interface NavigableSet extends SortedSet
public interface SortedSet extends Set
是具体的类
image.png
1、TreeSet()元素有顺序,顺序规则取决于构造函数

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

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

TreeSet it = new TreeSet();

与存入同序
image.png
不重复
image.png

四、Comparable接口

public interface Comparable
image.png
自定义的类使用TreeSet需要实现Comparable接口,重写方法

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

return 0;只输出第一个元素
return 1;输出的元素按升序
return -1;输出的元素image.png
按年龄排序:

@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;
}

image.png

三、Comparator比较器

image.png

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

image.png
image.png

五、案例一

image.png
image.png

六、案例二

image.png
image.png
image.png
Random类的用法:创建对象,对象调用方法nextInt(bound)

你可能感兴趣的:(java)