java模拟hashMap实现(linkedList方式)

xiaoxiao2021-02-27  548

package com.yys.student; import java.util.LinkedList; /** * Created by yys on 2017/5/3. */ public class SxtMap002 { LinkedList[] arr = new LinkedList[999];//数组中放链表 (此处是链表类型数组) int size; public void put(Object key,Object value){ SxtEntry2 e = new SxtEntry2(key,value); int a = key.hashCode()%arr.length; if(arr[a] == null){ LinkedList list = new LinkedList(); list.add(e); //链表中存放key value arr[a] = list; //如果计算出的hash值在链表数组中为空 在此位置new一个链表 放在这 }else{ LinkedList list = arr[a]; //如果计算出的hash值在链表数组中为不为空 取出这个位置链表 for(int i=0;i<list.size();i++){ SxtEntry2 entry1 = (SxtEntry2)list.get(i); if(entry1.key.equals(key)){ //循环判断新加入元素 和以前存在于此位置的key是否相同 entry1.value = value; //如果相同则覆盖以前的值 } } arr[a].add(e);//如果不相同则追加到此链表 } } public Object get(Object key){ int a = key.hashCode()%arr.length; //先获取hash值 if(arr[a] != null){ //如果hash存在于数组 LinkedList list = arr[a]; //获取hash值对应链表 for(int i=0;i<list.size();i++){ //遍历链表 SxtEntry2 entry2 = (SxtEntry2) list.get(i); if(key.equals(entry2.key)){ //链表中如果存在key相同情况 return entry2.value; //返回key对应value } } } return null; } public static void main(String args[]){ SxtMap002 sxtMap = new SxtMap002(); sxtMap.put("1",new Wife2("111")); sxtMap.put("1",new Wife2("222")); Wife2 wife = (Wife2) sxtMap.get("1"); System.out.println(wife.getName()); } } class SxtEntry2{ Object key; Object value; public SxtEntry2(Object key, Object value) { this.key = key; this.value = value; } } class Wife2{ private String name; public Wife2(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
转载请注明原文地址: https://www.6miu.com/read-381.html

最新回复(0)