花了一天时间用c写了一个类似java中的HashMap接受大家的检阅解决方案
花了一天时间用c写了一个类似java中的HashMap<E,E>,接受大家的检阅
在java中像ArrayList,HashMap都是现成的,在java.util包中,用的时候直接import java.util.*就行了。
前几天写了一c版的ArrayList,同时欢迎大家指出问题:
http://topic.csdn.net/u/20120429/18/4ab4bc02-2496-4d3c-8151-1cbe51e6fe9d.html?seed=425415324&r=78416084
今天有空,也为了练习一下c,我就参照着jdk中的HashMap源码,写了一个c版的HashMap,这个HashMap多少有点泛型的特征<E>。
关于这个HashMap,现在有一个困惑,在hashmap_remove()中,要不要在返回前free()?
直接上代码,接受大家的检阅(欢迎大家指出问题):
hashmap.h
------解决方案--------------------
感谢分享.
------解决方案--------------------
刚学完c(谭浩强版那本书),正学java中的白菜,看到Lz如此,我觉得,我连c的皮毛都没学到。帮忙顶了,感谢LZ分享,但是,我以后也会写出这般代码的!鼓励自己一下。哈,谢谢lz分享。
在java中像ArrayList,HashMap都是现成的,在java.util包中,用的时候直接import java.util.*就行了。
前几天写了一c版的ArrayList,同时欢迎大家指出问题:
http://topic.csdn.net/u/20120429/18/4ab4bc02-2496-4d3c-8151-1cbe51e6fe9d.html?seed=425415324&r=78416084
今天有空,也为了练习一下c,我就参照着jdk中的HashMap源码,写了一个c版的HashMap,这个HashMap多少有点泛型的特征<E>。
关于这个HashMap,现在有一个困惑,在hashmap_remove()中,要不要在返回前free()?
直接上代码,接受大家的检阅(欢迎大家指出问题):
hashmap.h
- C/C++ code
#ifndef HASHMAP_H_INCLUDED #define HASHMAP_H_INCLUDED //HashMap中的链表 typedef struct _entry { int hash; void *key; void *value; struct _entry *next; //单向链表 } *Entry; //主要用于hashmap_keySet() typedef struct _hashmapset { void *key; struct _hashmapset *next; } *HashMapSet; //hashmap 结构 typedef struct _hashmap { int K_E; //类似java中的泛型 int V_E; //类似java中的泛型 int size; int capacity; //当前容量 int threshold; //门槛 float factor; //扩展因子,当空间不够用时 Entry table; } *HashMap; #ifndef E_H_INCLUDED #define E_H_INCLUDED enum E{E_STRING,E_INT,E_OBJECT}; //枚举类型 #endif // E_H_INCLUDED void *hashmap_init(int k,int v); //初始化 void *hashmap_put(HashMap this,void *k,void *v); //在此映射中关联指定值与指定键。 void *hashmap_get(HashMap this,void *k); //返回指定键在此标识哈希映射中所映射的值,如果对于此键来说,映射不包含任何映射关系,则返回 null void *hashmap_remove(HashMap this,void *k); //如果此映射中存在该键的映射关系,则将其删除。 HashMapSet hashmap_keySet(HashMap this); //返回此映射中所包含的键的 set 视图。 void hashmap_clear(HashMap this); //从此映射中移除所有映射关系。 void hashmap_free(HashMap this); //释放内存 #endif // HASHMAP_H_INCLUDED
------解决方案--------------------
感谢分享.
------解决方案--------------------
刚学完c(谭浩强版那本书),正学java中的白菜,看到Lz如此,我觉得,我连c的皮毛都没学到。帮忙顶了,感谢LZ分享,但是,我以后也会写出这般代码的!鼓励自己一下。哈,谢谢lz分享。