zoukankan      html  css  js  c++  java
  • 简单实现一个自定义的HashMap——高淇JAVA300讲笔记之HashMap

      Map的底层结构就是:数组+链表。以下代码实现了put()和get()方法。

     1 package cn.bjsxt.collection;
     2 
     3 import java.util.LinkedList;
     4 
     5 /**
     6  * 自定义Map的升级版:
     7  * 1.提高查询的效率
     8  *
     9  */
    10 public class SxtMap002 {
    11     
    12     LinkedList[] arr = new LinkedList[999];  //Map的底层结构就是:数组+链表!
    13     int size;
    14     
    15     public void put(Object key, Object value) {
    16         SxtEntry e = new SxtEntry(key, value);
    17         
    18         int hash = key.hashCode();
    19         hash = hash<0?-hash:hash;
    20         int a = hash % arr.length;  //用key的哈希值除数组长度取余作为数组下标
    21         if(arr[a]==null) {
    22             LinkedList list = new LinkedList();
    23             arr[a] = list;
    24             list.add(e);
    25             
    26         } else {
    27             LinkedList list = arr[a];
    28             for(int i=0;i<list.size();i++) {
    29                 SxtEntry e2 = (SxtEntry)list.get(i);
    30                 if(e2.key.equals(key)) {
    31                     e2.value = value;  //键值重复直接覆盖!
    32                     return;
    33                 }
    34             }
    35             
    36             arr[a].add(e);
    37         }
    38         
    39     }
    40     
    41     public Object get(Object key) {
    42 //        return arr[key.hashCode() % 999];
    43         int a = key.hashCode() % arr.length;
    44         if(arr[a] != null) {
    45             LinkedList list = arr[a];
    46             for(int i=0;i<list.size();i++) {
    47                 SxtEntry e = (SxtEntry)list.get(i);
    48                 if(e.key.equals(key)) {
    49                     return e.value;
    50                 }
    51             }
    52         }
    53         
    54         return null;
    55         
    56     }
    57     
    58     
    59     public static void main(String[] args) {
    60         SxtMap002 m = new SxtMap002();
    61         m.put("高淇", new Wife("杨幂"));
    62         m.put("高淇", new Wife("李四"));
    63         Wife w = (Wife)m.get("高淇");
    64         System.out.println(w.name);
    65     }
    66 
    67 }

    运行结果,原来的值被覆盖了。

    李四

      

  • 相关阅读:
    格式控制符
    sort快速排序法
    堆积排序
    oracle常用命令
    C#中int和System.Int32理解总结
    IIS 7.5中的配置
    WPF循序渐进:XAML入门 .
    怎样找到excel两列之间同行相同的数据
    pl/sql functions and cbo costing
    Oracle 学习纲要
  • 原文地址:https://www.cnblogs.com/swimminglover/p/8331664.html
Copyright © 2011-2022 走看看