`
543089122
  • 浏览: 153190 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

由HashMap的实现联想到的

 
阅读更多
首先温故一下java.util.HashMap的实现
int i = indexFor(hash, table.length);

static int indexFor(int h, int length) {
        return h & (length-1);
}


原理:java中的HashMap是基于哈希表的 Map 接口的实现,内部是用数组+链表实现的,性能方面 哈希表>二叉树>线性表.为什么哈希表这么快呢?通过查看源码得知

通过把哈希值和数组长度进行与运算,为什么要进行与运算呢?因为与运算后得到的数字一定大于等于0并且小于等于数组长度。
(&运算:同位都为1则为1,否则为0。这样2个数进行&运算后得到的10进制数一定0<=n<=len)。

--------------------------------------
联想:不废话单刀直入,HashMap是由hash和链表混搭成的,于是我就想到为什么不那hash和平衡二叉树进行混搭呢?那样即便是冲突了,访问速度也不会完全退化到线性表啊!我想这个我们的Doug Lea大牛应该早就考虑过了,我估计他主要是HashMap做为单纯的hash表来使用,告知使用者尽量减少冲突,那个链表只是个小小的辅助职业而已。

于是我想在以后的开发中如果有比如有某个需求会用到hash+tree,那这还真是个不错的想法,至少这样混搭避免了大数组的创建和拷贝。
分享到:
评论

相关推荐

    Java实现搜索功能代码详解

    Map, Object&gt; searchParam = new HashMap(); searchParam.put("productName", productName); searchParam.put("place", place); searchParam.put("typeId", typeId); searchParam.put("minPrice", minPrice); ...

    Java联想(中文)

    Java集合框架包括接口(如List, Set, Map)和实现这些接口的类(如ArrayList, HashSet, HashMap)。它们提供了数据存储和操作的通用方法。 五、IO流 Java的IO流分为字节流和字符流,提供了读写文件、网络通信等功能...

    Java联想(中文)

    从ArrayList到HashMap,从LinkedList到HashSet,这些数据结构和接口的使用方法将会被详细阐述,帮助你高效地组织和管理数据。 最后,Java还提供了丰富的API和框架,如Swing和JavaFX用于桌面应用开发,Servlet和JSP...

    java联想(中文)

    4. **集合框架**:Java集合框架包括接口(如List、Set、Map)和实现类(如ArrayList、LinkedList、HashSet、HashMap),是处理数据集合的重要工具。 5. **输入/输出(I/O)**:包括文件操作、流的概念、序列化等,...

    java实现字典

    - **异步处理**:考虑到查词、改错和联想可能涉及较重的计算,可以使用Java的并发API(如ExecutorService)来实现异步处理,提高用户体验。 - **异常处理**:为了保证程序的健壮性,需要添加异常处理代码,确保在...

    Java联想

    【Java联想】——深入浅出Java入门概念与OOP精髓 在编程的世界里,Java无疑是一颗璀璨的明星,尤其对于初学者来说,它以其强大的跨平台能力、丰富的类库和简洁的语法特性赢得了广大开发者的心。本篇将围绕"Java入门...

    简易版词典,java语言实现

    为了高效地查询和联想单词,可能使用了适合的数据结构,如哈希表(HashMap)或二叉搜索树(BST)。哈希表能实现快速查找,而二叉搜索树则便于进行范围查询和排序。 5. **用户界面**: 词典程序提供了一个带联想框...

    部分公司(联想,三星,HTC,多米等)的android面试题暨面试技巧

    2. 集合框架:List、Set、Map接口的理解,以及ArrayList、LinkedList、HashMap等具体实现。 3. 异常处理:理解异常分类,如何抛出和捕获异常,以及try-catch-finally语句块的使用。 4. 多线程:掌握Thread、Runnable...

    Golang中Set类型的实现方法示例详解

    仍然按照已有的编程经验来联想如何实现基本Set功能,在Java中很容易知道HashSet的底层实现是HashMap,核心的就是用一个常量来填充Map键值对中的Value选项。除此之外,重点关注Go中Map的数据结构,Key是不允许重

    一款安卓输入法源码

    这部分代码会涉及到字符串处理、哈希表(HashMap)或数组等数据结构的使用,以快速查找对应汉字。 3. **用户界面** 输入法的界面设计和交互体验至关重要。源码中可能包含布局文件(XML)和对应的Java代码,用于...

    互联网面试手写代码常见题总结.docx

    3. 走台阶 1,2,3 步,请问到 100 步可以有多少种走法。 这道题目考察了动态规划的思想,可以使用递归和动态规划来解决问题。 4.m 个数里取 n 个最大数,我用最小堆解决,复杂度 mlogn 这道题目考察了堆排序的...

    java文字预测

    在Java中,我们可以使用ArrayList、HashMap或者其他集合类来存储这些词汇,以便于进行高效的查找和匹配操作。 在用户输入字母时,程序需要实时监听键盘事件,并对输入的字母序列进行处理。Java的AWT和Swing库提供了...

    javabook_java_

    在标签"java"中,我们可以联想到以下关键知识点: 1. **语法基础**:包括数据类型(基本类型如int、float,引用类型如类、接口、数组)、变量、运算符、流程控制(if、for、while、switch)、方法等。 2. **面向对象...

    中级程序员必备面试题.txt

    从`HashMap`可以联想到`ConcurrentHashMap`、`WeakHashMap`、`IdentityHashMap`等。 #### NULL处理方案 - 使用`Optional&lt;T&gt;`代替null值。 - 使用断言检查null值。 - 使用异常处理策略。 #### 自动实现`hashCode`...

    ElectronicDictionary.rar_Java编程_Java_

    再者,联想功能的实现通常涉及到关联规则学习或推荐系统。在Java中,我们可以使用Apriori算法或者协同过滤算法找出相关词汇。Apriori用于发现频繁项集,即用户经常一起查询的单词组合;而协同过滤则可以根据用户的...

Global site tag (gtag.js) - Google Analytics