您的位置:首页 > 其它

HashMap简单实现

2017-09-28 00:00 239 查看
摘要: HashMap简单实现

此实现仅仅是为了实现笔试题的东西,不必深究

1、链表

package com.java.demo.map;

/**
* @ClassName: Entry
* @Description:
* @author weiyb
* @date 2017年9月28日 下午4:54:44
* @param <K>
* @param <V>
*/
public class Entry<K, V> {

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

public Entry() {
super();
}

public Entry(K k, V v) {
super();
this.k = k;
this.v = v;
}

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;
}

}


2、map类

package com.java.demo.map;

/**
* @ClassName: MapModel
* @Description:
* @author weiyb
* @date 2017年9月28日 下午4:54:49
* @param <K>
* @param <V>
*/
public class MapModel<K, V> {

/**
* 数组长度
* @author weiyb
*/
private final int length = 100;

private Entry<K, V>[] entrys = new Entry[length];

/**
* 录入
* @param k
* @param v
* @author weiyb
*/
public void put(K k, V v) {
int index = hash(k.hashCode());
Entry<K, V> tmp = entrys[index];
if (tmp != null) {
while (tmp.getNext() != null && !k.equals(tmp.getNext().getK())) {
tmp = tmp.getNext();
}
tmp.setNext(new Entry<K, V>(k, v));
} else {
entrys[index] = new Entry<K, V>(k, v);
}
}

/**
* 获取
* @param k
* @return
* @author weiyb
*/
public V get(K k) {
Entry<K, V> result = new Entry<K, V>();
int index = hash(k.hashCode());
Entry<K, V> tmp = entrys[index];
if (!k.equals(tmp.getK())) {
while (tmp.getNext() != null && !k.equals(tmp.getNext().getK())) {
tmp = tmp.getNext();
}
if (tmp.getNext() != null) {
result = tmp.getNext();
}
} else {
result = tmp;
}
return result.getV();
}

private int hash(int h) {
return h % length;
}
}


3、测试

package com.java.demo.map;

import org.junit.Test;

/**
* @ClassName: MapTest
* @Description:
* @author weiyb
* @date 2017年9月27日 下午5:39:44
*/
public class MapTest {

@Test
public void mapTest() {
MapModel<String, Object> map = new MapModel<>();
for (int i = 0; i < 500; i++) {
map.put(i + "", 1000 + i);
}
for (int i = 0; i < 500; i++) {
System.out.println(map.get(i + ""));
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: