自定义实现HashMap的put、get方法
2018-06-18 00:58:05来源:未知 阅读 ()
public class HashMap{ public static void main(String[] args){ put("aa", "wo ai ni"); System.out.println(get("aa")); } //首先定义一个Object类型的数组,用来存数据 private static Object[] map = new Object[2000]; //定义put方法 public static void put(String key,Object object){ //根据key计算hashcode int index = hashcode(key); //将key,value封装成对象, 方便存入数组 Entry entry = new Entry(key, object); //判断hashcode值所在的节点是否有值 if(map[index]==null){ //如果为空,将entry添加到LinkedList中 LinkedList link = new LinkedList<Entry>(); link.add(entry); //保存LinkedList对象 map[index] = link; }else{ //如果不为null, 先获取节点上的链表,然后在链表后面添加entry对象 LinkedList<Entry> linkedList = (LinkedList<Entry>)map[index]; linkedList.add(entry); map[index] = linkedList; } } //根据key获取value public static Object get(String key){ int index = hashcode(key); //获取key对应的hashcode, 判断该节点是否为null,不为空先获取链表对象,然后遍历判断key, 返回key对应的value, 如果为null,返回null if(map[index]!=null){ LinkedList<Entry> linkedList = (LinkedList<Entry>)map[index]; for(Entry entry : linkedList){ if(key.equals(entry.key)){ return entry.value; } } } return null; } //hashcode生成方法,不为0的字符串,转成char数组,将所有char对应的ASCII码相加, 在乘以一个数, 作为这个key对应的hashcode public static int hashcode(String str){ int sum = 0; if(str.length() == 0){ return 0; }else{ char[] ch = str.toCharArray(); for(char c : ch){ sum += (int)c; } sum *=3; return sum; } } }
运行结果
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:工厂模式理解了没有?
- DES/3DES/AES 三种对称加密算法实现 2020-06-11
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
- Spring Boot 实现定时任务的 4 种方式 2020-06-10
- JSP+SSH+Mysql+DBCP实现的租车系统 2020-06-09
- Java实现的三种字符串反转 2020-06-09
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash