手动实现简单的HashMap

/**
* @des  自定义简单的HashMap
*/
import java.util.LinkedList;
public class MyMap {

	// 链表数字
	private LinkedList[] arr = null;
	// 大小
	int size;
	//初始化
	public MyMap() {
		this.arr = new LinkedList[10];
	}

	/**
	 * 获取大小的方法
	 * @return
	 */
	public int size() {
		return size;
	}

	/**
	 * map的添加方法
	 * 
	 * @param key
	 * @param value
	 */
	public void put(Object key, Object value) {

		// key 放在 那个具体的链表上
		int index = key.hashCode() % arr.length;

		// 取出链表
		LinkedList list = arr[index];

		// 创建 entry
		Entry entry = new Entry(key, value);

		if (list == null) { // 第一次添加 没有 链表 创建链表
			list = new LinkedList();
			list.add(entry);
			arr[index] = list;

		} else {
			list.add(entry);
		}
		size++;
	}

	/**
	 * 通过key 获取value的值
	 * @param key
	 * @return
	 */
	public Object getValue(Object key) {
		// 1 获取对应的链表
		// key 放在 那个具体的链表上
		int index = key.hashCode() % arr.length;

		// 取出链表
		LinkedList list = arr[index];
		// 2遍历链表 找到entry (key判断 找entry)
		if (list != null) {
			for (int i = 0; i < list.size(); i++) {
				// 拿到entry
				Entry entry = (Entry) list.get(i);
				if (entry != null) {
					// 判断是我要找的 entry
					if (entry.key.equals(key)) {
						return entry.value;
					}
				}
			}
		}
		return null;
	}
	/**
	 * 是否包含 key
	 * @param key
	 * @return
	 */
	public boolean containsKey(Object key) {
		// 1 获取对应的链表
		// key 放在 那个具体的链表上
		int index = key.hashCode() % arr.length;
		// 取出链表
		LinkedList list = arr[index];
		// 2 便利链表 找到entry (key判断 找entry)
		if (list != null) {

			for (int i = 0; i < list.size(); i++) {
				// 拿到entry
				Entry entry = (Entry) list.get(i);
				if (entry != null) {
					// 判断是我要找的 entry
					if (entry.key.equals(key)) {
						return true;
					}
				}
			}
		}
		return false;
	}

	/**
	 * 是否包含 key
	 * @param key
	 * @return
	 */
	public void remove(Object key) {
		// 1 获取对应的链表
		// key 放在 那个具体的链表上
		int index = key.hashCode() % arr.length;

		// 取出链表
		LinkedList list = arr[index];
		// 2 便利链表 找到entry (key判断 找entry)

		if (list != null) {

			for (int i = 0; i < list.size(); i++) {
				// 拿到entry
				Entry entry = (Entry) list.get(i);
				if (entry != null) {
					// 判断是我要找的 entry
					if (entry.key.equals(key)) {
						list.remove(entry);
						break;
					}
				}
			}
		}
		size--;
	}

	class Entry {

		Object key;
		Object value;

		public Entry(Object key, Object value) {
			this.key = key;
			this.value = value;
		}
	}

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值