`

hashmap的简单实现

    博客分类:
  • Java
阅读更多
  1. 来自Thinking In Java【P493】。
     Java Code 
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
     
    package org.vocano.java.tst;

    import java.util.*;

    public class SimpleHashMap<K,V> extends AbstractMap<K,V> {
        // Choose a prime number for the hash table
        // size, to achieve a uniform distribution:
        static final int SIZE = 997;
        // You can't have a physical array of generics,
        // but you can upcast to one:
        @SuppressWarnings("unchecked")
        LinkedList<SimpleEntry<K,V>>[] buckets =
            new LinkedList[SIZE];
        public V put(K key, V value) {
            V oldValue = null;
            int index = Math.abs(key.hashCode()) % SIZE;
            if(buckets[index] == null)
                buckets[index] = new LinkedList<SimpleEntry<K,V>>();
            LinkedList<SimpleEntry<K,V>> bucket = buckets[index];
            SimpleEntry<K,V> pair = new SimpleEntry<K,V>(key, value);
            boolean found = false;
            ListIterator<SimpleEntry<K,V>> it = bucket.listIterator();
            while(it.hasNext()) {
                SimpleEntry<K,V> iPair = it.next();
                if(iPair.getKey().equals(key)) {
                    oldValue = iPair.getValue();
                    it.set(pair); // Replace old with new
                    found = true;
                    break;
                }
            }
            if(!found)
                buckets[index].add(pair);
            return oldValue;
        }
        public V get(Object key) {
            int index = Math.abs(key.hashCode()) % SIZE;
            if(buckets[index] == null) return null;
            for(SimpleEntry<K,V> iPair : buckets[index])
                if(iPair.getKey().equals(key))
                    return iPair.getValue();
            return null;
        }
        public Set<Map.Entry<K,V>> entrySet() {
            Set<Map.Entry<K,V>> set= new HashSet<Map.Entry<K,V>>();
            for(LinkedList<SimpleEntry<K,V>> bucket : buckets) {
                if(bucket == null) continue;
                for(SimpleEntry<K,V> mpair : bucket)
                    set.add(mpair);
            }
            return set;
        }
        public static void main(String[] args) {
            SimpleHashMap<String,String> m =
                new SimpleHashMap<String,String>();
            m.put("a""b");
            System.out.println(m.get("a"));
        }

     

分享到:
评论

相关推荐

    用hashmap实现词典查询

    本话题主要关注如何利用HashMap这一数据结构来实现词典查询,以提供快速、便捷的字典服务。HashMap是Java编程语言中的一种内置数据结构,它提供了O(1)的平均时间复杂度来执行查找、插入和删除操作,这使得它成为构建...

    HashMap源码实现红黑树添加元素和删除元素

    HashMap 源码实现红黑树添加元素和删除元素 HashMap 中使用红黑树来存储元素,是为了提高查找、插入和删除操作的性能。红黑树是一种自平衡二叉树,可以保持二叉树的平衡,从而获得较高的查找性能。 红黑树的创建...

    asp hashmap,arraylist实现

    虽然ArrayList操作相对简单,但其查找效率不如HashMap,因为它是线性搜索,时间复杂度为O(n)。在ASP.NET中,ArrayList可能用于存储一组动态生成的数据,比如从数据库查询的结果。 描述中的链接指向了一篇博客文章,...

    简单的QQ聊天程序,用hashmap实现信息的存储

    在这个简单的QQ聊天程序中,开发者利用了HashMap这一数据结构来存储和管理信息,以实现高效的消息传递和用户交互。 HashMap在Java中是集合框架的一个重要组成部分,它是一种基于哈希表的Map接口实现。HashMap提供了...

    Hashmap实现了Map接口的底层实现.docx

    HashMap是Java编程语言中一种非常重要的数据结构,它实现了Map接口,允许存储...HashSet作为HashMap的子类,提供了简单的无序集合存储功能。理解HashMap的底层机制和使用注意事项,对于编写高性能的Java代码至关重要。

    简单的key value hashmap

    哈希映射(HashMap)是Java编程语言中一个非常重要的数据结构,它在《简单的key value hashmap》中被提及,通常用于存储键值对(key-value pairs)。HashMap是Java集合框架的一部分,它提供了高效的查找、插入和删除...

    枚举 HashMap

    以下是一个简单的示例,展示了如何用HashMap实现枚举功能: ```java import java.util.HashMap; import java.util.Map; public class GenericEnum { private static final Map, EnumItem&gt; ENUM_MAP = new HashMap...

    Java用数组和链表的方式简单实现HashMap的增删改功能 数组和链表.pdf

    在Java中,HashMap的实现方式有多种,本文将介绍使用数组和链表的方式简单实现HashMap的增删改功能。 HashMap的数据结构 HashMap的数据结构主要由三个部分组成:数组、链表和红黑树。数组用于存储键值对,链表用于...

    马士兵老师HashMap学习笔记

    在JDK 7中,HashMap的put过程相对简单,也是通过哈希值定位到桶,如果桶为空则直接插入,否则将新元素添加到链表的末尾。然而,由于HashMap是非线程安全的,如果多个线程同时put可能导致死循环的问题。这是因为当两...

    hashmap 集合

    在深入理解HashMap之前,我们先简单回顾一下Java集合的基本概念。 Java集合框架包括Set、List和Map三个主要接口。其中,Map接口不同于Set和List,因为它不存储重复元素,而是通过键来唯一标识每个值。HashMap就是...

    hashmap.zip

    下面我们将深入探讨HashMap的实现原理,以及如何通过代码实现一个简单的HashMap存取示例。 **哈希表基础** 哈希表是一种数据结构,通过哈希函数将键(key)映射到数组的索引位置,从而实现快速访问。HashMap的核心...

    一个基于js的HashMap

    以下是一个简单的JavaScript HashMap实现示例: ```javascript class HashMap { constructor(size = 53) { this.map = new Array(size); } hash(key) { let hash = 0; for (let i = 0; i ; i++) { hash += ...

    Java数组+链表简单实现HashMap的put和get 数组和链表.pdf

    这里我们将分析一个简单的自定义HashMap实现,它使用Java数组和链表来完成put和get操作。 首先,我们看到类`MyHashMap`包含一个名为`Entry`的内部类,`Entry`类代表数组中的每个元素,它包含了键(K)和值(V),...

    HashMap CRUD操作

    创建HashMap对象非常简单,只需要调用构造函数即可: ```java HashMap, Product&gt; productMap = new HashMap(); ``` 这里的`String`是键的类型,`Product`是值的类型,代表每个产品由一个唯一的标识(如产品ID)作为...

    Java-HashMap.rar_hashmap_java hashmap

    `www.pudn.com.txt`可能是提供资料来源的网站链接,这里主要关注的是`Java集合中HashMap的简单使用.txt`文件,它可能包含了关于如何在实际代码中运用`HashMap`的示例和解释。例如,如何创建`HashMap`,插入键值对,...

    hashMap工具类

    在本篇文章中,我们将详细介绍一个名为`hashMap`的工具类,该类被设计用于Adobe Flex应用程序中,旨在提供一种简单且高效的方法来处理键值对数据结构。通过深入分析该类的实现细节,我们能够更好地理解其内部机制,...

    用HashMap写的一个小Demo用来写游戏排名的一种方法

    在这个"用HashMap写的一个小Demo用来写游戏排名的一种方法"的示例中,我们很可能会看到如何利用HashMap来组织游戏分数并进行排序,以实现一个简单的游戏排名系统。 HashMap的特点在于它的键(key)是唯一的,每个键...

    在Java8与Java7中HashMap源码实现的对比

    总结,Java 8的HashMap源码实现通过引入红黑树优化了高负载情况下的性能,降低了哈希冲突的影响,而Java 7则相对简单,适合小规模数据存储。在实际应用中,应根据数据量和性能需求选择合适的版本。对于开发者来说,...

    HashMap与ConcurrentHashMap面试要点.pdf

    ### HashMap和ConcurrentHashMap...综上所述,面试时通常会针对HashMap和ConcurrentHashMap的实现原理、它们的差异、以及在并发环境下如何保证数据的一致性和线程安全进行提问。了解这些知识点有助于在面试中脱颖而出。

    用HashMap模拟一个网上购物车

    在本实验中,我们通过使用Java语言中的`HashMap`来模拟一个简单的网上购物车系统。该项目的主要目的是熟悉Java集合框架中的`HashMap`类,并了解如何利用它来存储、管理和检索数据。此外,我们还将学习如何使用`...

Global site tag (gtag.js) - Google Analytics