码迷,mamicode.com
首页 > 其他好文 > 详细

对HashMap的学习一

时间:2020-06-30 17:21:23      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:ati   font   dex   public   object   key   for   private   不同   

1.使用数组加链表的形式简单的实现hashmap的put,get,size方法
package com.ycs;

import java.util.Collection;
import java.util.Map;
import java.util.Set;

public class MyHashMap<K,V> {

//定义一个数组,数据是链表形式(结点entry)
private Entry[] table;
//定义数组的默认值大小
private static Integer CAPACITY=8;
//定义size的默认值;
private int size=0;
//数组完成初始化
public MyHashMap() {
this.table = new Entry[CAPACITY];

}



//实现hashmap的size方法
public int size() {
return size;
}

//实现hashmap的get方法
public Object get(Object key) {
//通过Key 获取hashcode值
Integer code =key.hashCode();
//通过hashcode值获得数组下标
Integer index=code % table.length;
//通过数组下标对链表进行循环遍历,看是否有key相同的数
for (Entry entry=table[index];entry!=null;entry=entry.next){
if(entry.getK().equals(key)){
return entry.getV();
}
}
return null;
}

//实现hashmap的Put方法
public Object put(K key, V value) {
//通过Key值获取hashcode值
Integer code=key.hashCode();
//通过hashcode获取下标
Integer index=code % table.length;
//如果传入的key相同,value值不同,更新value值
for (Entry entry=table[index];entry!=null;entry=entry.next){
//判断Key是否相同
if(entry.getK().equals(key)){
entry.setV(value);
return entry.v;
}
}
//添加结点
addEntry(key, value, index);
return null;
}

//添加结点
private void addEntry(K key, V value, Integer index) {
//将结点加在链表的头部
Entry<K,V> entry=new Entry<>(key,value,table[index]);
//头结点移到下标位置
table[index]=entry;
size++;
}


//定义一个结点
class Entry<K,V>{

private K k;
private V v;
private Entry<K,V> next;

public Entry(K k, V v, Entry<K, V> next) {
this.k = k;
this.v = v;
this.next = next;
}

public K getK() {
return k;
}

public void setK(K k) {
this.k = k;
}

public V getV() {
return v;
}

public void setV(V v) {
this.v = v;
}

public Entry<K, V> getNext() {
return next;
}

public void setNext(Entry<K, V> next) {
this.next = next;
}
}

public static void main(String[] args) {
MyHashMap myHashMap=new MyHashMap();
for (int i=1;i<=10;i++) {
myHashMap.put("周瑜"+i, "老师"+i);
}
System.out.println(String.format("myhashmap的值为%s,长度为%s",myHashMap.get("周瑜"),myHashMap.size()));
}
}

对HashMap的学习一

标签:ati   font   dex   public   object   key   for   private   不同   

原文地址:https://www.cnblogs.com/yaochangshun/p/13214645.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!