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

1、LinkedHashSet集合

public class LinkedHashSet<E> implements Set<E>
是具體的類dom

  • 哈希表和鏈表實現的Set接口
  • 存入和取出的順序一致(鏈表特性)
  • 沒有重複的元素(哈希表)
    image.png
    演示:
    image.png
    確實順序一致且不重複

2、TreeSet集合

public class TreeSet implements NavigableSet<E>
public interface NavigableSet<E> extends SortedSet<E>
public interface SortedSet<E> extends Set<E>
是具體的類
image.png
一、TreeSet()元素有順序,順序規則取決於構造函數函數

  • 如果無參構造,則天然排序
  • 如果有參構造,則根據指定的比較器進行排序
    二、沒有索引,不能普通for遍歷,能夠Iterator和加強for
    三、與Set<E>有間接繼承關係,所以元素不能重複
    注意:
    集合只能存儲引用類型

若是想存儲基本類型,必須用他們的包裝類
例如存儲整數只能用Integerthis

TreeSet<Integer> it = new TreeSet<Integer>();

與存入同序
image.png
不重複
image.pngspa

4、Comparable接口

public interface Comparable
image.png
自定義的類使用TreeSet須要實現Comparable接口,重寫方法code

public class Student implements Comparable<Student>{
}
@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

3、Comparator比較器

image.png

有參構造方法中接收new comparator<E>,即comparator的對象
重寫compare方法,注意主要條件和次要條件(三元運算符)

image.png
image.png

5、案例一

image.png
image.png

6、案例二

image.png
image.png
image.png
Random類的用法:建立對象,對象調用方法nextInt(bound)繼承

相關文章
相關標籤/搜索