采用链接法处理碰撞

/*** MapEntry<K,V>存储KEY-VALUE键值对,当发生碰撞时,可以还可以根据不同的key来查找value。* * @author Administrator** @param <K>* @param <V>*/
class MapEntry<K, V> {private K key;   //键private V value; //值public MapEntry(K key, V value) {super();this.key = key;this.value = value;}public boolean equivalent(MapEntry<K, V> entry) {return equivalent(entry.getKey());}public boolean equivalent(K k) {return key.equals(k);}public K getKey() {return key;}public V getValue() {return value;}
}/*** 设计并实现散列表,使用链表处理碰撞冲突* * @author Administrator** @param <K>* @param <V>*/
public class Hash<K, V> {private final int MAX_SIZE = 10;private LinkedList<MapEntry<K, V>>[] items;@SuppressWarnings("unchecked")public Hash() {items = (LinkedList<MapEntry<K, V>>[]) new LinkedList[MAX_SIZE];}/*** 非常简单的散列,可以导致许多碰撞冲突。* @param key* @return*/public int hashCodeOfKey(K key) {return key.toString().length() % items.length;}public void put(K key, V value) {int idx = hashCodeOfKey(key);if (items[idx] == null) {items[idx] = new LinkedList<MapEntry<K, V>>();}LinkedList<MapEntry<K, V>> list = items[idx];for (MapEntry<K, V> entry : list) {//遍历链表发现是否有相同的keyif (entry.equivalent(key)) {list.remove(entry);break;}}MapEntry<K, V> entry = new MapEntry<K, V>(key, value);list.add(entry);}public V get(K key) {int idx = hashCodeOfKey(key);if (items[idx] == null) {return null;}LinkedList<MapEntry<K, V>> list = items[idx];for (MapEntry<K, V> entry : list) {if (entry.equivalent(key)) {return entry.getValue();}}return null;}public static void main(String[] args) {Hash<String, String> hash = new Hash<String, String>();hash.put("zdm", "帥");hash.put("zzm", "丑");hash.put("zzm", "呵呵");System.out.println(hash.get("zdm"));System.out.println(hash.get("zzm"));}
}

HasMap简单实现相关推荐

  1. Spring工作原理。原理就是这么简单

    IoC与DI   首先想说说IoC(Inversion of Control,控制倒转).这是spring的核心,贯穿始终.所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命 ...

  2. 在docker上安装部署tomcat项目 超简单,拿来主义

    在docker中部署tomcat,非常简单,而且省去了手动安装jdk等步骤,只需要将war包复制在容器tomcat实例中的webapps下面即可.以下将详细讲解流程: 在windows中打好包以后用w ...

  3. Linux下tomcat的安装与卸载以及配置(超简单)

    无敌简单的几步 1.安装 //首先你需要下载好tomcat包 sudo tar -xvzf apache-tomcat-7.0.85.tar.gz(这里是包名) -C 你要放的位置 2.卸载 rm - ...

  4. Docker安装Apache与运行简单的web服务——httpd helloworld

    Docker运行简单的web服务--httpd helloworld目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker运行简单的web ...

  5. Docker的安装、镜像源更换与简单应用

    Docker的安装.镜像源更换与简单应用[阅读时间:约20分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 三.Docker的安装 四.Docker的简单应用 1. ...

  6. 基于Golang的简单web服务程序开发——CloudGo

    基于Golang的简单web服务程序开发--CloudGo[阅读时间:约10分钟] 一.概述 二.系统环境&项目介绍 1.系统环境 2.项目的任务要求 (1)基本要求 (2)扩展要求 三.具体 ...

  7. 简单图文配置golang+vscode【win10/centos7+golang helloworld+解决install failed等情况】

    博客目录(阅读时间:10分钟) 一.win10 0.系统环境 1. win10配置golang环境 ①下载相关软件 ②创建gowork工作空间 ③配置环境变量(GOPATH+PATH) ④验证环境配置 ...

  8. 简单介绍互联网领域选择与营销方法

    在我看来,互联网领域的选择是"安家",而营销方法的不同则表现了"定家"的方式多种多样,只有选对了,"家"才得以"安定". ...

  9. JAVA用最简单的方法来构建一个高可用的服务端,提升系统可用性

    一.什么是提升系统的高可用性 JAVA服务端,顾名思义就是23体验网为用户提供服务的.停工时间,就是不能向用户提供服务的时间.高可用,就是系统具有高度可用性,尽量减少停工时间.如何用最简单的方法来搭建 ...

最新文章

  1. 和牛奶太多量竟然会发胖~
  2. c语言 编程 牛顿迭代,C语言编写牛顿迭代法的跟踪
  3. cad细等线体不显示_CAD图纸乱码、钢筋符号不显示解决办法(内含万能字体)
  4. php加载autoload,php自动加载类__autoload()的方法_PHP教程
  5. javaweb学习总结—jsp简单标签标签库开发
  6. 毅航产品—模拟载板I
  7. 如何在前端删除项目中的文件_如何在macOS上恢复已删除的文件
  8. 大文件读取mmap磁盘映射
  9. Office、excel、word卡死(或卡顿后自动恢复)的解决方案
  10. Android4.0上添加截屏快捷方式
  11. CAD图纸转换成高质量的PDF文件,两种方法一步搞定哦
  12. 名义初品微商系统开发,小程序开发
  13. 安搭Share为您推荐学理财投资必读的书籍
  14. 小萨村的激光SLAM学习笔记
  15. Windows 7 x64 SP1 安装 Windows Edge 浏览器
  16. SQL——数据库使用规范(入门规范)
  17. Linux系统中的磁盘管理
  18. tomcat配置前端静态文件gzip压缩
  19. app版本更新 下载apk后没有跳转到安装页面
  20. 微信小程序js日期格式转化及加减

热门文章

  1. Word之页眉和页脚设置(一)
  2. HTML如何实现带有滚动条的文本框
  3. Hyper-V相关Powershell cmdlets
  4. 警告:关于电磁辐射对孕妇的危害。
  5. day1 简介,变量,用户输入,字符串拼接,列表,元组,字典
  6. ps抠图——抠出自己想要的素材(钢笔工具的使用)
  7. 图像识别技术,目前主要应用于哪些领域?
  8. 手机上将png转pdf_如何在Linux上将多个jpg图像合并为pdf?
  9. Comparable+Comparator+Cloneable接口
  10. win服务器的远程连接--如何打开远程连接服务器?如何设置远程连接?连接工具?