中秋 -2024/9/16

今天是中秋假期的第二天,已经过了2/3了,怎么俺滴中秋这么快就没了
今天学习了SQL语句种的查询聚合函数进行查询和Java种的集合 TreeSet,HashSet,LinkedHashSet

DQL-聚合函数

  1. 介绍:将一列数据作为一个整体,进行纵向计算
  2. 常见聚合函数

count - 统计数量
max - 最大值
min - 最小值
avg - 平均值
sum - 求和
3. 语法

SELECT 聚合函数(字段列表) FROM 表名;
注意:所有的null值不参与所有聚合函数运算

//统计数量
select count(id) from emp;

//统计平均值
select avg(age) from emp;

//求最大值
select max(age) from emp;

//求和
select sum(age) from emp where age = 22;

DQL -分组查询

SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名[HAVING 分组后过滤条件];

注意

  • 执行顺序:where > 聚合函数 > having
  • 分组之后,查询的字段一般为聚合函数和分组函数,查询其他字段无任何含义

HashSet底层原理

  1. 创建一个默认长度为16,默认加载因子为0.75(用于数组扩容,12个时扩容)的数组,数组名为table

JDK8以后,当链表长度超过8,而且数组长度大于等于64时,自动转换为红黑树
如果集合中存储的是自定义对象,必须重写hashCode和equals方法

LinkedHashSet底层机制

TreeSet的特点

  • 不重复,无索引,可排序
  • 可排序:按照元素的默认规则(由小到大)排序
  • TreeSet集合底层是基于红黑树的数据结构实现排序的,增删改查性能都较好
import java.util.Iterator;
import java.util.TreeSet;

public class a07TreeSet_Test {
    public static void main(String[] args) {
        TreeSet<Integer> ts = new TreeSet<>();

        ts.add(1);
        ts.add(4);
        ts.add(5);
        ts.add(2);
        ts.add(3);

        //1.迭代器遍历
        Iterator<Integer> it = ts.iterator();
        while(it.hasNext()) System.out.println(it.next());

        //2.增强for循环遍历
        for(Integer i : ts){
            System.out.println(i);
        }

        //3.Lambda表示式遍历
        ts.forEach(i -> System.out.println(i));

    }
}

TreeSet集合的默认的规则

  • 对于数值类型,Integer,Double,默认按照从小到大的顺序进行排序
  • 对于字符,字符串类型:按照字符在ASCII码表的数字升序进行排序

TreeSet的两种比较方式

  1. 默认排序/自然排序:javabean类实现Comparable接口指定接口比较规则
@Override
    public int compareTo(Student o) {
        return this.age - o.getAge();
    }

2.比较器排序:创建TreeSet对象时候,传递比较器Comparator指定规则
使用规则:默认使用第一种,如果第一种不能满足当前需求,就使用第二种

//重写接口Comparable   compareTo方法
 @Override
    public int compareTo(Stu o) {
        //总分从小到大排序
        int i = this.getChinese() + this.getMath() + this.getEnglish() - o.getEnglish() - o.getMath() - o.getChinese();
        //总分一样,语文从小到大
        i = i == 0 ? this.getChinese() - o.getChinese() : i;
        //语文一样,数学从小到大
        i = i == 0 ? this.getMath() - o.getMath() : i;
        //数学一样,年龄从小到大
        i = i == 0 ? this.getAge() - o.getAge() : i;
        //年龄一样,名字首字母排序
        i = i == 0 ? this.getName().compareTo(o.getName()) : i;
        return i;
    }

posted @ 2024-09-16 23:06  XYu1230  阅读(5)  评论(0编辑  收藏  举报