实现HashMap部分方法

学习目标

更新于(2018-7-13 18:06:30)

    自己实现一个HashMap的部分方法,更好的理解HashMap类的底层结构!

/**
 * 自定义Entry类,包含key-value
 */
public class Entry {

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

/**
 * 自定义HashMap类 - 内部调用LinkedList
 */
public class MyHashMap {

	LinkedList[] arr = new LinkedList[999]; // 模拟测试,不考虑扩容问题
	private int size; // 集合大小
	
	/**
	 * 返回集合大小
	 */
	public int size() {
		return size;
	}
	
	/**
	 * 返回集合是否为空
	 */
	public boolean isEmpty() {
		return size == 0;
	}
	
	/*
	 * 新增元素,传参(key,value)
	 */
	public void put(Object key,Object value) {
		
		Entry entry = new Entry(key,value); // 实例化Entry类
		
		int num = key.hashCode()%arr.length; // key唯一hashCode
		
		/**
		 * 如果num为空,LinkedList添加元素
		 */
		if(arr[num] == null) {
			LinkedList list = new LinkedList();
			arr[num] = list;
			list.add(entry);
		}else {
			/**
		     * 如果num不为空,LinkedList覆盖元素,比较key,若key相等覆盖value
		     */
			LinkedList list = arr[num];
			for(int i = 0; i < list.size(); i++) {
				Entry newEntry = (Entry) list.get(i);
				if(newEntry.key.equals(key)) {
					newEntry.value = value;
				}
			}
		}
		arr[num].add(entry);
		size++;
	}
	
	/**
	 * 根据key获取元素
	 */
	public Object get(Object key) {
		
		int num = key.hashCode()%arr.length; // key唯一hashCode
		
		/**
		 * 如果num不为空,比较key,若key相等取出相应的value
		 */
		if(arr[num] != null) {
			LinkedList list = arr[num];
			for(int i = 0; i < list.size(); i++) {
				Entry entry = (Entry) list.get(i);
				if(entry.key.equals(key)) {
					return entry.value;
				}
			}
		}
		return null;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值