hashcode原理 / 比较器 / 聚合操作


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]]

聚合操作

JDK8之后,引入了聚合操作,这样就非常好遍历,筛选,比较集合中的元素了
想要学好聚合操作,必须先掌握Lambda表达式,详见Lambda与聚合操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值