【Java】哈希算法的实现-----Hash

本文详细介绍了哈希结构的概念、哈希表的实现、HashMap与HashTable的区别,以及解决哈希冲突的方法。通过代码示例展示了查找键值对的过程,并探讨了Java中的四种引用类型。此外,还提供了大数据习题及其解决方案。
摘要由CSDN通过智能技术生成

内容目录

  • 哈希结构概述
  • 代码实现
  • 注意问题
  • HashMap迭代的方式
  • 解决哈希冲突的方式
  • HashTable和HashMap的联系与区别
  • java中的四种引用
  • 五道大数据习题

哈希结构概述
1、概念:Hash(哈希),又称“散列”。哈希表综合数组和链表二者的特性,达到了查询容易,插入删除也容易的数据。
①数组 => 它在内存空间中是连续的,占用的内存比较多,我们添加删除一个元素的时候时间复杂度比较大,查询容易。
②链表 => 它在内存空间中是分散的,占用的内存也是分散的,添加删除一个元素的时候时间复杂度比较小,查询难。

  • hashCode() 表示的是对当前对象的唯一标示。计算 hashCode 的过程就称作哈希。
  • 最常用哈希表的数据结构:数组+链表 散列表。
  • 哈希表中存储键值对 key-value,散列指的是通过key定位到存储的位置,针对任意的key通过哈希算法转换为固定的位置(数组)。
  • key位置关系并不是一对一,多对一的关系,所以会引发哈希冲突。

代码实现
查找一个<key,value>为例
1)先通过hash算法,找到与key对应的存储位置
2)访问该位置的value与当前value比较,如果相等,直接返回
3)反之才需要去当前链表中找

class MyHash<K,V>{

    private Node<K,V>[] table;

    class Node<K, V>{
        protected K key;
        protected V value;
        protected Node<K, V> next;
    }

}

class MyPriorityQueue<E extends Comparable<E>>{
    private E[] queue;//存放元素的容器
    private int size; //有效元素个数
    private static int defaultCapacity = 5;

    public MyPriorityQueue(){
        this(defaultCapacity);
    }

    public MyPriorityQueue(int capacity){
        queue = (E[])new Comparable[capacity];
    }

    public void add(E val){
        //判满
        if(size == queue.length){
            //扩容
            queue = Arrays.copyOf(queue,queue.length*2);
        }
        if(size == 0){
            queue[0] = val;
            size++;
        } else{
            adjust(size, val);
            size++;
        }

    }
    public void adjust(int index,E val){
        while (i
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值