此实现仅仅是为了实现笔试题的东西,不必深究
1、链表
package com.java.demo.map;
/**
* @ClassName: Entry
* @Description:
* @author weiyb
* @date 2017年9月28日 下午4:54:44
* @param
* @param
*/
public class Entry {
private K k;
private V v;
private Entry 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 getNext() {
return next;
}
public void setNext(Entry next) {
this.next = next;
}
}
2、map类
package com.java.demo.map;
/**
* @ClassName: MapModel
* @Description:
* @author weiyb
* @date 2017年9月28日 下午4:54:49
* @param
* @param
*/
public class MapModel {
/**
* 数组长度
* @author weiyb
*/
private final int length = 100;
private Entry[] entrys = new Entry[length];
/**
* 录入
* @param k
* @param v
* @author weiyb
*/
public void put(K k, V v) {
int index = hash(k.hashCode());
Entry tmp = entrys[index];
if (tmp != null) {
while (tmp.getNext() != null && !k.equals(tmp.getNext().getK())) {
tmp = tmp.getNext();
}
tmp.setNext(new Entry(k, v));
} else {
entrys[index] = new Entry(k, v);
}
}
/**
* 获取
* @param k
* @return
* @author weiyb
*/
public V get(K k) {
Entry result = new Entry();
int index = hash(k.hashCode());
Entry 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 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 + ""));
}
}
}