java map setv_HashMap简单实现

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

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 + ""));

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值