堆,初识


堆的基本模板
int heap[MAX_N],sz = 0;

void push(int x){
    // 自己结点的编号
    int i = sz ++;

    while (i > 0){
        // 父亲结点的编号
        int p = (i-1)/2;

        // 如果已经没有大小颠倒则退出
        if (heap[p] <= x) break;

        // 把父亲结点的数值放下来,而把自己提上去
        heap[i] = heap[p];
        i = p;
    }

    heap[i] = x;
}

int pop() {
    // 最小值
    int ret = heap[0];

    // 要提到根的数值
    int x = heap[--sz];

    // 从根开始向下交换
    int i = 0;
    while (i*2 + 1 < sz){
        // 比较儿子的值
        int lson = i*2 + 1,rson = i*2 + 2;
        if (rson < sz && heap[rson] < heap[lson]) lson = rson;

        // 如果已经没有大小颠倒则退出
        if (heap[lson] >= x)break;

        // 把儿子的数值提上来
        heap[i] = heap[lson];

        i = lson;
    }

    heap[i] = x;

    return ret;
}
附上大神STL的链接: 点击打开链接
基于Spring Boot搭建的一个多功能在线学习系统的实现细节。系统分为管理员和用户两个主要模块。管理员负责视频、文件和文章资料的管理以及系统运营维护;用户则可以进行视频播放、资料下载、参与学习论坛并享受个性化学习服务。文中重点探讨了文件下载的安全性和性能优化(如使用Resource对象避免内存溢出),积分排行榜的高效实现(采用Redis Sorted Set结构),敏感词过滤机制(利用DFA算法构建内存过滤树)以及视频播放的浏览器兼容性解决方案(通过FFmpeg调整MOOV原子位置)。此外,还提到了权限管理方面自定义动态加载器的应用,提高了系统的灵活性和易用性。 适合人群:对Spring Boot有一定了解,希望深入理解其实际应用的技术人员,尤其是从事在线教育平台开发的相关从业者。 使用场景及目标:适用于需要快速搭建稳定高效的在线学习平台的企业或团队。目标在于提供一套完整的解决方案,涵盖从资源管理到用户体验优化等多个方面,帮助开发者更好地理解和掌握Spring Boot框架的实际运用技巧。 其他说明:文中不仅提供了具体的代码示例和技术思路,还分享了许多实践经验教训,对于提高项目质量有着重要的指导意义。同时强调了安全性、性能优化等方面的重要性,确保系统能够应对大规模用户的并发访问需求。
### Java 中常用的集合类及其用法 #### Collection 接口概述 `Collection` 是 Java 集合框架中的根接口之一,它表示一组元素的容器。该接口提供了许多操作这些元素的方法,如添加、删除和查询等[^1]。 #### 常见实现类 - **List**: 有序可重复列表,允许存储相同元素多次,并保持插入顺序。 - `ArrayList`: 实现了基于动态数组的数据结构;随机访问效率高,增删较慢。 - `LinkedList`: 双向链表实现,在频繁插入/删除场景下性能较好。 - **Set**: 不含重复元素的无序集合。 - `HashSet`: 使用哈希表来保存数据项,提供快速查找功能。 - `TreeSet`: 提供排序能力,内部采用红黑树算法维护键值对关系。 - **Queue (队列)**: 主要用于处理先进先出的任务调度问题。 - `PriorityQueue`: 支持优先级排序,默认最小形式排列待处理条目。 ```java // List 示例代码 import java.util.*; public class Main { public static void main(String[] args){ // 创建 ArrayList 并初始化一些字符串类型的元素 List<String> list = new ArrayList<>(Arrays.asList("a", "b")); // 添加新元素到末尾 list.add("c"); System.out.println(list); // 输出 [a, b, c] Iterator<String> it = list.iterator(); while(it.hasNext()){ String element = it.next(); System.out.print(element + ", "); } // 结果 a, b, c, } } ``` 对于 `Set` 和其他类型的操作也十分相似,只是各自有着不同的特性与适用范围[^2]。 #### 数组与集合之间的转换 可以利用构造函数或静态工厂方法轻松完成两者间的相互转变: - 将数组转化为集合可以通过 Arrays 类下的 asList 方法; - 而从集合变回数组则调用 collection.toArray(new T[size]) 即可[^3]。 #### 迭代遍历方式 存在多种手段用来枚举集合内的成员: - foreach 循环语句, - iterator() 获取迭代器实例逐一遍访, - Stream API 流式编程风格(适用于 JDK8+ 版本) 以上就是关于 Java 中常见的几种集合类型简介以及它们的基础运用介绍[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值