大家好,欢迎来到IT知识分享网。
hashcode原理
- List的查找效率低下
HashMap的查找效率好,几乎不花时间。类似平时查字典,先找目录找到多少页,然后直接翻到对应的页码就好了,而这个页码就是HashMap中的hashcode - HashMap性能卓越的原因
- hashcode概念:所有的对象都会有一个对应的hashcode(散列值)
- 保存数据:在对应的hashcode上放对象,如果该hashcode已经存在对象,那么就在该位置创建一个链表,接着存放对象。
- 查找数据:根据key计算对应的hashcode,根据hashcode定位查找数组中的值,如果该hashcode找到两个值,那么使用equal进行比对。
- HashSet判断是否重复
如果hashcode不同,则在不同的坑里,一定是不同的。
如果hashcode相同,在相同的坑里,使用equal进行比较
比较器
Comparator
在使用Collections.sort()时,无法确定使用什么属性进行比较,所以我们必须引入Comparator给定对象如何进行大小比较。需要重定义Comparator类中的compare函数
Comparable
使对象实现Comparable接口,重定义compareTo方法,这样就不需要额外提供比较器Comparator
实例
package List; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; / * 比较器的使用 * Comparator * Comparable * * * @author Aike * @create 2021-05-14 10:36 */ //实现Comparable接口 class hero implements Comparable{
public String name; public double hp; public hero() {
} public hero(String name, double hp) {
this.name = name; this.hp = hp; } public String toString(){
return "Hero [name="+name+",hp="+hp+"]"; } @Override public int compareTo(Object h) {
if(hp>((hero) h).hp) return 1; else return -1; } } public class Comparator1 {
public static void main(String[] args) {
List<hero> heros=new ArrayList<hero>(); heros.add(new hero("后裔",10)); heros.add(new hero("典韦",8)); heros.add(new hero("雅典娜",30)); System.out.println(heros); // 引入Comparator,定义比较的算法 Comparator<hero> c=new Comparator<hero>() {
@Override public int compare(hero h1,hero h2) {
if(h1.hp> h2.hp) return 1; else return -1; } }; // Collections.sort(heros,c); // System.out.println(heros); Collections.sort(heros); System.out.println(heros); } }
[Hero [name=后裔,hp=10.0], Hero [name=典韦,hp=8.0], Hero [name=雅典娜,hp=30.0]] [Hero [name=典韦,hp=8.0], Hero [name=后裔,hp=10.0], Hero [name=雅典娜,hp=30.0]]
聚合操作
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/144915.html