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

hashcode原理 / 比较器 / 聚合操作本文详细解读了 HashMap 的 hashcode 原理 如何利用 Comparator 和 Comparable 进行高效排序 并介绍了 JDK8 后的聚合操作

大家好,欢迎来到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

(0)
上一篇 2025-04-23 16:20
下一篇 2025-04-23 16:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信