1.查找时间复杂度O(1)
2..
3..
因为Java中自带HashMap,平时直接用,也没有考虑,前一段时间只是实现了ArrayList,Vetor,Quene,并没有考虑HashMap。笔试的时候由于时间紧,我只是在HashMap中定义两个ArrayList,一个保存Key,一个保存Value,现在想想肯定是不对的,这根本没有按照要求实现。题目的原意是让实现链表,考察操作链表的能力。回来之后,我想了想,用Java实现了一般的链表:
<span style="font-size:14px;">/** * * @author lip * 用拉链法实现hashMap * 原理:hashmap中有一个链表数组 * 一般数组的大小为一个素数 */ public class HashMap<T1,T2> { private final int LENGTH=31; private Entry<T1, T2>[]table; private int size=0; public HashMap() { table=new Entry[LENGTH]; } //向hashMap插入值 public void put(T1 key,T2 value) { size++; //求出T1的hash值,然后p=hash(key)%LENGTH,将key放在数组中p位置处的链表中 //如果map中存在该值,那么更新该值 //不存在该值,那么插在链表最后一个位置 int pos=key.hashCode()%LENGTH; if(table[pos]==null) { table[pos]=new Entry<T1,T2>(key,value); return; } //遍历list,看key-value是否已经存在 Entry<T1, T2> entry=table[pos]; boolean exist=false; while (table[pos] != null) { if (table[pos].key == key)// 存在,更新就可以了 { table[pos].value = value; size--; exist = true; break; } if(table[pos].next==null) break; else table[pos] = table[pos].next; } if(!exist) table[pos].next=new Entry<T1,T2>(key,value); table[pos]=entry; } //删除一个key public void delete(T1 key) { int pos=key.hashCode()%LENGTH; Entry<T1, T2> entry=table[pos]; while(entry!=null) { if(entry.key==key) { //删除当前接节点 Entry<T1, T2>tempEntry=entry.next; entry=entry.next; if(entry!=null) entry.next=tempEntry.next; size--; break; } entry=entry.next; } } //得到key的value public T2 getValue(T1 key) { int pos=key.hashCode()%LENGTH; Entry<T1, T2>entry=table[pos]; while(entry!=null) { if(entry.key==key) return entry.value; entry=entry.next; } return null; } //得到key的集合 public Set<T1> getKeySet() { Set<T1> set=new HashSet<T1>(); for(int i=0;i<LENGTH;i++) { Entry<T1, T2> entry=table[i]; while(entry!=null) { set.add(entry.key); entry=entry.next; } } return set; } //得到map的大小 public int size() { return size; } class Entry<T1,T2> { private T1 key; private T2 value; public Entry<T1, T2>next; public Entry(T1 key,T2 value) { this.key=key; this.value=value; } } public static void main(String[] args) { // TODO Auto-generated method stub HashMap<String, Integer>hashMap=new HashMap<String, Integer>(); hashMap.put("语文", 82); hashMap.put("数学", 99); hashMap.put("英语", 90); hashMap.put("物理", 88); hashMap.put("化学", 93); hashMap.put("生物", 86); hashMap.put("生物", 88); System.out.println("HashMap Size:"+hashMap.size()); System.out.println("生物:"+hashMap.getValue("生物")); System.out.println("语文:"+hashMap.getValue("语文")); Set<String> set=hashMap.getKeySet(); for(Iterator<String> iterator=set.iterator();iterator.hasNext();) { String key=iterator.next(); System.out.println(key+":"+hashMap.getValue(key)); } } }</span>运行如图:
原文:http://blog.csdn.net/yilip/article/details/45272021