采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师比如我在一个堆中存放一些对象(student),那我的比较器是写在堆这个类中还是写在创建对象的那个类中。如果这个对象是Integer又该如何写
两种方式都可以。
这个课程使用的方式,是写在对象的类中。我们在堆中,直接调用 E 来性的 compareTo 方法,默认用户传来的类型已经实现了 compareTo。
对于 Integer 这种 Java 内置类,本身已经实现了 compareTo(实现了 Comparable 接口),但如果要自定义比较方式的话,不能覆盖 Java 自己的定义,只能借助外部比较器。在 Java 中,就是实现一个 Comparator。
可以在网上搜索一下 Comparator,学习一下。同时,可以研究一下 Java 内置的 PriorityQuueue 的接口。使用 Java 内置的 PriorrityQueue,一种创建方式,就是传入一个比较器(Comparator),用来定义优先队列的比较方式。如果没有定义比较器,就自动使用存储元素的类定义。
在这个课程中,由于以介绍数据结构原理为主,在工程上,我没有考虑的那么全面,否则代码量就太大了。有兴趣的话,可以根据 Java 的设计,再来拓展我们的课程代码:)
继续加油!:)
那如果传入的类型没有实现compareTo,在堆这个类里就必须自己定义一个外部比较器是吗
对。因为堆的内部必须对元素进行比较。
登录后可查看更多问答,登录/注册
动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…
10.4k 16
1.4k 17
1.3k 14